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

4Ev*_*ive 0 javascript regex string split

当使用/[ -_]+/作为参数传递给在JavaScript string.split,它的作用就像是/['\"]+/

"a'b".split(/[ -_]+/)
'a"b'.split(/[ -_]+/)
Run Code Online (Sandbox Code Playgroud)

返回

["a", "b"]
Run Code Online (Sandbox Code Playgroud)

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

这种行为是否正确?

Mat*_*all 5

-在字符类中具有特殊含义。它表示一系列字符。在这种情况下,范围是从空格 (ASCII 32) 到下划线 (ASCII 95)。因为 ASCII 码'"(分别)是39和34它们落在该范围内。

如果要拆分文字-,请转义它;

"a'b".split(/[ \-_]+/)
Run Code Online (Sandbox Code Playgroud)

或者使连字符成为字符类的第一个字符:

"a'b".split(/[- _]+/)
Run Code Online (Sandbox Code Playgroud)