Как получить Word перед сопоставлением слов с помощью regex Javascript?

Я пытался извлечь значение перед матчем. Например, у меня есть следующие предложения:

Флорида 22.03.2022 05.04.2022 Служба поддержки заявок рада помочь вам

Флорида, 05.04.2022 Служба поддержки заявок рада помочь вам

В этих примерах я хочу извлечь все, что предшествует последнему вхождению даты. Итак, последнее вхождение даты: 05.04.2022, и я хочу извлечь

03/22/2022
Florida

потому что это отстает от даты сопоставления. Мне удалось получить последнее вхождение даты с помощью следующего регулярного выражения:

var Date = /(\b[0-9]{2}([\-/ \.])[0-9]{2}[\-/ \.][0-9]{4}\b)(?![A-Z]\1)\b(?!.*\b\2\b)/gs.exec(String)[0];

Любое руководство будет высоко оценено.

у вас есть эта строка Florida 03/22/2022 04/05/2022 Bid Support Help Desk is glad to assist you, но вы хотите извлечь Флориду, и обе даты случайны?

Dreamy Player 17.03.2022 15:44

Может быть, вы хотите /(\S+)\s+\b(\d{2}([-/ .])\d{2}\3\d{4})\b(?!.*\b\d{2}([-/ .])\d{2}\4\d{4}\b)/? См. regex101.com/r/LK9nXX/1

Wiktor Stribiżew 17.03.2022 15:44

Да, приведенное выше регулярное выражение работает именно так, как мне нужно, но можем ли мы исключить последнее вхождение из результата, потому что оно дает следующие совпадения для обоих примеров: 22.03.2022 05.04.2022 и Флорида 05.04.2022

Roomi 17.03.2022 15:52

Не могли бы вы отредактировать вопрос и объяснить, в чем ваша проблема? Вы хотите сказать, что вам нужно 1) 03/22/2022 и 2) Florida из двух упомянутых вами строк? Обратите внимание, что они уже есть в группе 1. Или вы не хотите получать результаты для строки 2?

Wiktor Stribiżew 17.03.2022 15:59

Предложенное вами регулярное выражение дало следующие совпадения: 22.03.2022 05.04.2020 и Флорида 05.04.2022 Я просто хочу 22.03.2022 и Флорида, исключив дату (05.04.2022)

Roomi 17.03.2022 16:02

Это не имеет значения, что соответствует. Вам просто нужно значение группы 1. Конечно, вы также можете использовать просмотр вперед...

Wiktor Stribiżew 17.03.2022 16:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ты можешь использовать

\S+(?=\s+\b(\d{2}([-/ .])\d{2}\2\d{4})\b(?!.*\b\d{2}([-/ .])\d{2}\3\d{4}\b))

См. демонстрация регулярных выражений. Подробности:

  • \S+ - один или несколько пробелов
  • (?= — положительный прогноз, который требует, чтобы следующие шаблоны совпадали сразу справа от текущего местоположения:
  • \s+ один или несколько пробелов
  • \b(\d{2}([-/ .])\d{2}\2\d{4})\b - Группа 1: граница слова, две цифры, разделитель (захваченный в группе 2), две цифры, тот же символ-разделитель, что и в группе 2, четыре цифры, граница слова
  • (?!.*\b\d{2}([-/ .])\d{2}\3\d{4}\b) - отрицательный поиск вперед при неудачном совпадении, если есть ноль или более символов, отличных от символов разрыва строки, как можно больше, за которыми следует граница слова, две цифры, разделитель (захваченный в группе 3), две цифры, тот же символ-разделитель, что и в Группа 3, четыре цифры, граница слова
  • ) - конец положительного прогноза.

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.info(text, '=>', text.match(reg)?.[0]);
}

Ух ты. Это невероятно!

Cooper 21.03.2022 06:44

Другие вопросы по теме