我正在尝试匹配一个包含“电话号码”字样的句子,但不匹配在“电话号码”前任何位置包含“我的字眼”的句子。
我已经尝试过:(?<!\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
,则我希望它失败。
答案 0 :(得分:1)
您可以使用否定的超前查询来检查我的单词是否在电话号码之前,然后匹配包含电话号码的字符串:
^(?!.*?\bmy\b.*\bphone number\b).*\bphone number\b.*$
这将匹配:
^
字符串的开头(?!.*?\bmy\b.*\bphone number\b)
断言该字符串不包含我之前的电话号码.*
匹配任何char 0次以上\bphone number\b
单词边界之间的数学电话号码,以防止单词更大的匹配.*
对任意字符进行0次以上的数学运算$
字符串的结尾答案 1 :(得分:1)
这是应该正常工作的常规正则表达式:
^(?!.*\bmy\b.*\bphone number\b).*\bphone number\b.*$
这使用否定的前瞻性来确保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