2013-02-24 128 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