Javascript Reg Exp将一个句子与单词“电话号码”匹配,但之前没有单词“ my”

时间:2019-01-31 10:58:08

标签: javascript regex regex-lookarounds

我正在尝试匹配一个包含“电话号码”字样的句子,但不匹配在“电话号码”前任何位置包含“我的字眼”的句子。

我已经尝试过:(?<!\bmy\s)(p[^\s]*h[^\s]*n[^\s]*e|t[^\s]*l[^\s]*p[^\s]*n)\s+number

(预期的)哪个不匹配: where do i enter my phone number in your form?

但是匹配(不符合预期) this is my awesome phone number

基本上,如果字my是之前的某处在句子phone number,则我希望它失败。

  • 支持落后。

2 个答案:

答案 0 :(得分:1)

您可以使用否定的超前查询来检查我的单词是否在电话号码之前,然后匹配包含电话号码的字符串:

^(?!.*?\bmy\b.*\bphone number\b).*\bphone number\b.*$

Regex demo

这将匹配:

  • ^字符串的开头
  • (?!.*?\bmy\b.*\bphone number\b)断言该字符串不包含我之前的电话号码
  • .*匹配任何char 0次以上
  • \bphone number\b单词边界之间的数学电话号码,以防止单词更大的匹配
  • .*对任意字符进行0次以上的数学运算
  • $字符串的结尾

答案 1 :(得分:1)

这是应该正常工作的常规正则表达式:

^(?!.*\bmy\b.*\bphone number\b).*\bphone number\b.*$

Demo

这使用否定的前瞻性来确保my不会出现在句子中任何地方的phone number. Then, it matched电话号码之前。

以下是一些JavaScript代码:

var sentence = 'This is my phone number';
/^(?!.*\bmy\b.*\bphone number\b).*\bphone number\b.*$/.test(sentence); // false
sentence = 'I have a phone number.';
/^(?!.*\bmy\b.*\bphone number\b).*\bphone number\b.*$/.test(sentence); // true