正则表达式 - 匹配除+之外的任何字符,空字符串也应匹配

zaq*_*zaq 27 javascript regex

我在JavaScript中使用的正则表达式的一部分遇到了一些麻烦.我需要一种方法匹配字符以外的任何+字符,空字符串也应该匹配.

[^+]几乎是我想要的,除了它与空字符串不匹配.我曾经尝试过[^+]*思考:"除了+零次或多次之外的任何角色",但这符合一切,包括+.

Cod*_*key 29

  • [^+]意思是"匹配任何不是+"的单个字符
  • [^+]*意味着"匹配任何数量的不是+" 的字符- 这几乎看起来像我想要的那样,除非它匹配零字符,如果第一个字符(甚至所有字符)都是+.

使用锚点来确保表达式验证整个字符串:

^[^+]*$
Run Code Online (Sandbox Code Playgroud)

手段:

^       # assert at the beginning of the string
[^+]*   # any character that is not '+', zero or more times
$       # assert at the end of the string
Run Code Online (Sandbox Code Playgroud)


cho*_*own 26

添加一个{0,1},使它只匹配零次或一次,不多也不少:

[^+]{0,1}
Run Code Online (Sandbox Code Playgroud)

或者,正如FailedDev指出的那样,?也有效:

[^+]?
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,使用Chrome的JavaScript控制台进行测试显示不匹配"+"但与其他字符匹配:

x = "+"
y = "A"

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

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

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

y.match(/[^+]?/)
["A"]
Run Code Online (Sandbox Code Playgroud)

  • 不,你不需要逃避它,其次是{0,1} = ?. +1然而. (3认同)

Sco*_*pey 6

如果您只是测试字符串以查看是否不包含+,则应使用:

^[^+]*$
Run Code Online (Sandbox Code Playgroud)

仅当ENTIRE字符串为no时,此匹配+