虽然以下代码将给定字符串“hello_world”拆分为“hello”和“world”,但还是创建了第三个空字符串。因此, length 属性在以下代码中显示3而不是2。第三个空字符串是如何创建的,虽然没有找到它?
<script type="text/javascript">
var str = "hello_world";
var res = str.split(/_(.+)/);
alert(res);
alert(res.length);
</script>
答案 0 :(得分:3)
如果在分隔符正则表达式中有捕获组,则捕获组的匹配项将包含在拆分结果中。
正在发生的事情是正则表达式匹配_world
,因此它在分隔符之前将字符串拆分为hello
,之后将""
拆分为/_.+/
。因此,如果您没有捕获组(即正则表达式只是["hello", ""]
),结果将是
world
因为你有一个捕获组,所以它也会匹配。该组匹配["hello", "world", ""]
,因此结果变为
{{1}}
答案 1 :(得分:0)
此模式_(。+)匹配_字符及其后的任何类型的一个或多个字符,因此基本上它与输入中的 _world 相匹配
但你的模式在括号()中有一个被捕获的组,它匹配单词 world ,因此单词 world 保留在分割结果中
如果删除括号,它将使用 _world 作为分隔符,结果是长度为2的数组,其中 hello 和空字符串