如何在使用正则表达式 Javascript 匹配单词之前获取单词?

How to get Word before matching word using regex Javascript?

我一直在尝试提取匹配前的值。例如,我有以下句子:

佛罗里达州 03/22/2022 04/05/2022 投标支持服务台很高兴为您提供帮助

佛罗里达州 04/05/2022 投标支持服务台很高兴为您提供帮助

在这些示例中,我想提取最后一次出现日期之前的任何内容。所以,最后一次出现的日期是:04/05/2022 我想提取

03/22/2022
Florida

因为晚于匹配日期。我已经能够通过以下正则表达式获得最后一次出现的日期:

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

任何指导将不胜感激。

您可以使用

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

regex demo详情:

  • \S+ - 一个或多个空格
  • (?= - 正向前瞻,要求以下模式立即匹配到当前位置的右侧:
  • \s+ 一个或多个空格
  • \b(\d{2}([-/ .])\d{2}\d{4})\b - Group1:字边界,两位数字,一个分隔符(在第 2 组中捕获),两位数字,与第 2 组中相同的分隔符 char,四位数字,字边界
  • (?!.*\b\d{2}([-/ .])\d{2}\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}\d{4})\b(?!.*\b\d{2}([-/ .])\d{2}\d{4}\b))/;
for (const text of texts) {
  console.log(text, '=>', text.match(reg)?.[0]);
}