2013-02-24 136 views
0

我需要一个正则表达式,它在字符串不匹配关键字时返回一些东西(整个句子)。找不到字的正则表达式

也许这是奇怪的,但我需要在JavaScript是这样的:

"any word".match(/.*(?!my key)/) => I would want ["any word"] 
"my key".match(/.*(?!my key)/) => I would want null 

这以前是行不通的。

我不能这样做,这将工作:

if "any word".match(/my key/) 
    return null 
else 
    return "any word" 

,因为我是收到一个正则表达式,如果它匹配执行功能的场所内。

回答

1

在您的正则表达式中,.*首先匹配整个字符串,然后前瞻断言(?!my key)也成功(因为在字符串末尾不能匹配my key)。

你想

"test string".match(/^(?!.*my key).*/) 

此外,您可能需要使用s修改,如果你的测试字符串可能包含换行符,你可能想使用单词边界(\b),以避免像army keypad串误报:

"test string".match(/^(?!.*\bmy key\b).*/s) 
+1

“my key”.match(/(?!.* my key)。* /)give [“y key”],我相信诸如“。*”,“。+”之类的东西应该不能用在(?!)(?=) – prM 2013-02-24 08:00:10

+0

@prM:对,我忘了锚!谢谢! ''''''等等可以用在lookahead中(当然,这取决于你想要达到的目标,如果你真的使用它们,你需要关注性能问题,但是当锚定时,这是完全可以的)。 – 2013-02-24 08:02:08

+0

是否需要(。!。* my key)中的“。*”取决于程序员想要实现的内容。其余的都很好。 – prM 2013-02-24 08:07:52