2011-11-18 55 views
17

我對用於JavaScript的正則表達式的一部分有點麻煩。我需要一種方法來匹配除+字符以外的任何字符,空字符串也應該匹配。正則表達式 - 匹配除+之外的任何字符,空字符串也應該匹配

[^+]幾乎是我想要的,但它不匹配空字符串。我試過[^+]*想:「除+以外的任何字符,零次或多次」,但是這匹配包括+在內的所有內容。

+0

怎麼可能是'[^ +] *'匹配'+ '?這沒有意義。你的表情一定有其他錯誤。 –

+1

@ScottRippey:我猜測(在我的回答中)'*'量詞允許匹配成功通過匹配任何東西(零個字符不是'+')成功。在沒有錨或其他斷言的情況下,理論上它可以在'+'之前或之後匹配,從而允許整個字符串匹配。 (當然這會匹配之前的,因爲這是第一個,它會在那裏停止)這個評估對你沒有意義嗎? –

回答

18

添加{0,1}它,因此它只會匹配0或者1次,不多不少:

[^+]{0,1} 

或者,如FailedDev指出,?工程太:

[^+]? 

正如預期的那樣,隨着Chrome的JavaScript控制檯測試表明敵不過"+"但並匹配其它字符:

x = "+" 
y = "A" 

x.match(/[^+]{0,1}/) 
[""] 

y.match(/[^+]{0,1}/) 
["A"] 

x.match(/[^+]?/) 
[""] 

y.match(/[^+]?/) 
["A"] 
+3

不,你不需要逃避它,其次{0,1} =?。 +1然而。 – FailedDev

+0

這兩個選項似乎都匹配所有內容,包括僅根據http://www.regular-expressions.info/javascriptexample.html – zaq

+0

根據上面的網站,這不匹配任何東西。 – zaq

4

如果你只是測試的字符串,看它是否不包含+,那麼你應該使用:

^[^+]*$ 

這將匹配只有當整個字符串沒有+

+0

這實際上只是較大表達式的一部分,所以我不一定要匹配整個字符串。 – zaq

18
  • [^+]意味着「匹配任何單個字符不是+
  • [^+]*的意思是「匹配不是+任何數目的字符」 - 這似乎像什麼,我想你想,只是它將匹配如果第一個字符(或者甚至是所有字符)都是+,則爲零字符。

使用錨,以確保表達式驗證整個字符串:

^[^+]*$ 

表示:

^  # assert at the beginning of the string 
[^+]* # any character that is not '+', zero or more times 
$  # assert at the end of the string 
相關問題