He estado tratando de extraer el valor antes del partido. Por ejemplo, tengo las siguientes oraciones:
Florida 22/03/2022 05/04/2022 La mesa de ayuda de soporte de ofertas se complace en ayudarlo
Florida 04/05/2022 La mesa de ayuda de soporte de ofertas se complace en ayudarlo
En estos ejemplos, quiero extraer cualquier cosa anterior a la última aparición de la fecha. Entonces, la última aparición de la fecha es: 05/04/2022 y quiero extraer
22/03/2022
Florida
porque está detrás de la fecha coincidente. He podido obtener la última aparición de la fecha mediante la siguiente expresión regular:
var Date = /(\b[0-9]{2}([\-/ \.])[0-9]{2}[\-/ \.][0-9]{4}\b)(?![AZ]\1)\b(?!.*\b\2\b)/gs.exec(String)[0];Cualquier orientación sería muy apreciada.
Puedes usar
\S+(?=\s+\b(\d{2}([-/ .])\d{2}\2\d{4})\b(?!.*\b\d{2}([-/ .])\d{2}\3\d{4}\b))Vea la demostración de expresiones regulares . Detalles :
\S+ - uno o más espacios en blanco(?= - una anticipación positiva que requiere que los siguientes patrones coincidan inmediatamente a la derecha de la ubicación actual:\s+ uno o más espacios en blanco\b(\d{2}([-/ .])\d{2}\2\d{4})\b - Grupo 1: límite de palabras, dos dígitos, un separador (capturado en el Grupo 2), dos dígitos , el mismo carácter separador que en el Grupo 2, cuatro dígitos, límite de palabra(?!.*\b\d{2}([-/ .])\d{2}\3\d{4}\b) - una búsqueda anticipada negativa que falla en la coincidencia si hay cero o más caracteres que no sean caracteres de salto de línea tantos como sea posible seguidos de límite de palabra, dos dígitos, un separador (capturado en el Grupo 3), dos dígitos, el mismo carácter separador que en el Grupo 3, cuatro dígitos, límite de palabra) - fin de la anticipación positiva. const texts = ['Florida 03/22/2022 04/05/2022 Bid Support Help Desk is glad to assist you','Florida 04/05/2022 Bid Support Help Desk is glad to assist you']; const reg = /\S+(?=\s+\b(\d{2}([-/ .])\d{2}\2\d{4})\b(?!.*\b\d{2}([-/ .])\d{2}\3\d{4}\b))/; for (const text of texts) { console.log(text, '=>', text.match(reg)?.[0]); }