Javascript 为什么split函数在以下情况下创建三个子字符串而不是两个子字符串?
尽管下面的代码将给定字符串“hello_world”拆分为“hello”和“world”,但仍创建了第三个空字符串。因此length属性在下面的代码中显示3而不是2。如何创建第三个空字符串(尽管未查找)Javascript 为什么split函数在以下情况下创建三个子字符串而不是两个子字符串?,javascript,regex,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> va
<script type="text/javascript">
var str = "hello_world";
var res = str.split(/_(.+)/);
alert(res);
alert(res.length);
</script>
var str=“你好,世界”;
var res=str.split(/(+)/);
警报(res);
警报(res.length);
此模式匹配字符及其后的一个或多个任意类型的字符,因此基本上它匹配您输入的\u world
但是您的模式在括号()中有一个捕获的组,它与单词world匹配,因此单词world保留在拆分的结果中
如果删除括号,它将使用\u world作为分隔符,结果是长度为2的数组,带有hello和空字符串当分隔符正则表达式中有捕获组时,捕获组的匹配项将包含在拆分结果中 所发生的事情是正则表达式正在匹配
\u world
,因此它将字符串拆分为分隔符前面的hello
,后面的“”
。因此,如果您没有捕获组(即,如果regexp只是/.+/
),结果将是
["hello", ""]
因为您有一个捕获组,所以它也会拼接匹配的数据。该组匹配world
,因此结果为
["hello", "world", ""]
您可能需要
str.split(//)代码>您现在拥有的是“按和其后出现的任何字符分割”。我很惊讶你没有以“你好”和空字符串结束。。。或者只是str.split(“'')
,但是当使用捕获组时,他可能意味着什么。我不明白这如何解释为什么在分割的末尾有一个空字符串。