为什么split函数在下列情况下创建三个子串而不是两个子串?

时间:2015-09-25 02:00:14

标签: javascript regex

虽然以下代码将给定字符串“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>

2 个答案:

答案 0 :(得分:3)

如果在分隔符正则表达式中有捕获组,则捕获组的匹配项将包含在拆分结果中。

正在发生的事情是正则表达式匹配_world,因此它在分隔符之前将字符串拆分为hello,之后将""拆分为/_.+/。因此,如果您没有捕获组(即正则表达式只是["hello", ""] ),结果将是

world

因为你有一个捕获组,所以它也会匹配。该组匹配["hello", "world", ""] ,因此结果变为

{{1}}

答案 1 :(得分:0)

此模式_(。+)匹配_字符及其后的任何类型的一个或多个字符,因此基本上它与输入中的 _world 相匹配

但你的模式在括号()中有一个被捕获的组,它匹配单词 world ,因此单词 world 保留在分割结果中

如果删除括号,它将使用 _world 作为分隔符,结果是长度为2的数组,其中 hello 和空字符串