2011-11-18 108 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 
相关问题