为什么 JavaScript string.split(/[ -_]+/) 的行为就好像引号 (' 和 ") 包含在 [group] 中一样?



使用/[ -_]+/作为字符串参数时。在JavaScript中,它的行为就好像是/['"]+/

"a'b".split(/[ -_]+/)
'a"b'.split(/[ -_]+/)

返回
["a", "b"]

我只看到这个行为与确切的正则表达式:[ -_],即空格,连字符和下划线。如果我删除这3个字符中的任何一个,它的行为(在我看来是)正确,通过不分割'和'

这个行为正确吗?

-在字符类中具有特殊的意义。它表示一个字符范围。在本例中,范围是从空格(ASCII 32)到下划线(ASCII 95)。因为'"的ASCII码分别是39和34,所以它们都在这个范围内。

如果您想在文字-上分割,请转义

"a'b".split(/[ -_]+/)

或者将连字符作为字符类的第一个字符:

"a'b".split(/[- _]+/)

这里的连字符用来指定一个字符范围。

[ -_]表示"空格和下划线之间的每个字符"。

所以…单引号和双引号明显位于空格和下划线字符之间。

似乎你的regex是错误的,"-"的意思是:-和_之间的范围内的单个字符。

您可以在http://regex101.com/#javascript站点中测试您的regexp。

最新更新