如何在使用正则表达式 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]);
}
我一直在尝试提取匹配前的值。例如,我有以下句子:
佛罗里达州 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]);
}