我在使用JavaScript中的正则表达式时遇到了一些问题。 我需要一种匹配除+
字符外任何字符的方法,空字符串也应该匹配。
[^+]
几乎符合我的要求,但它无法匹配空字符串。 我尝试过[^+]*
,认为“任何字符都不是+
,零次或多次”,但这将匹配所有内容,包括+
。
我在使用JavaScript中的正则表达式时遇到了一些问题。 我需要一种匹配除+
字符外任何字符的方法,空字符串也应该匹配。
[^+]
几乎符合我的要求,但它无法匹配空字符串。 我尝试过[^+]*
,认为“任何字符都不是+
,零次或多次”,但这将匹配所有内容,包括+
。
添加{0,1}以使其只匹配零次或一次,既不多也不少:
[^+]{0,1}
或者,正如FailedDev所指出的那样,?
也可以使用:
[^+]?
如预期,使用Chrome的JavaScript控制台进行测试时,"+"
没有匹配项,但会匹配其他字符:
x = "+"
y = "A"
x.match(/[^+]{0,1}/)
[""]
y.match(/[^+]{0,1}/)
["A"]
x.match(/[^+]?/)
[""]
y.match(/[^+]?/)
["A"]
[^+]*
是否与整个字符串匹配,您需要将其放在^([^+]*)$
的形式中。 - ruakh[^+]
的意思是“匹配任何一个不是+
的单个字符”[^+]*
的意思是“匹配任何一个不是+
的多个字符”,这似乎与你想要的非常接近,但它会匹配零个字符,如果第一个字符(甚至全部字符)是+
。使用锚点来确保表达式验证整个字符串:
^[^+]*$
意思是:
^ # assert at the beginning of the string
[^+]* # any character that is not '+', zero or more times
$ # assert at the end of the string
如果您只是想测试字符串是否不包含+
,那么应该使用:
^[^+]*$
仅当整个字符串没有 +
时,才会匹配。
[^+]*
怎么可能匹配+
呢?这没有道理。你的表达式肯定有其他问题。 - Scott Rippey*
量词通过成功匹配没有与+
不同的零个字符来允许匹配成功。如果没有锚点或其他断言,它理论上可以匹配+
之前或之后的任何位置,从而允许整个字符串匹配成功。(当然它会在+
之前匹配,因为那是第一个匹配项,而且只会停留在那里)这种评估对你来说没有意义吗? - Code Jockey