2013-02-25 88 views
0
var name ='John Rock'; 
alert((/^John|Steve$/i).test(name)); 

http://jsfiddle.net/czBhb/精確匹配使用正則表達式

此代碼警報true,因爲不使用精確mathing,但到。

對於JohnjoHn應該返回true(案例匹配關閉)。但不適用於John 12mahjohng

|在代碼中,我們應該保持它。

如何解決這個正則表達式?

+1

可能的複製[正則表達式 - 匹配整個字符串(http://stackoverflow.com/q/6298566/851811)。 – 2013-02-25 13:37:42

+0

顯然'|'具有比'^'和'$'更低的運算符優先級,這有點違反直覺。所以你需要將'John | Steve'包裝在括號中,以便在'^'和'$'錨點之前應用'|'。 – mellamokb 2013-02-25 13:38:46

+0

Beat Richartz指出這個問題後,我已經在半小時前指出瞭如何在[我的回答你的早期問題](http://stackoverflow.com/a/15066690/157247)中做到這一點。 – 2013-02-25 13:39:58

回答

2

var name ='John Rock'; 
alert((/^(John|Steve)$/i).test(name)); 
3

如果你的目標是什麼,以匹配準確JohnSteve,你想要把一組有:

alert(/^(?:John|Steve)$/i.text(name)); 

還要注意i爲不區分大小寫。 (我沒有在my answer to your other question指出這一點,半個多小時前,只要敲打理查指出了這個問題。)

+0

我錯過了,謝謝 – Jasper 2013-02-25 13:42:07

2

試試這個:^$之間

alert(/^(?:John|Steve)$/i).test(name)) 

(?:羣體,而不實際創建組

/i爲不區分大小寫

1

點是在^$分隔符。正如在評論中已經指出的那樣,它們似乎優先於OR,因此您的正則表達式匹配以John開始或以Steve結尾的任何內容。

把分隔符外的OR:的

var name ='John Rock'; 
alert((/^(John|Steve)$/).test(name));