即使不存在捕获括号,为什么 split 仍返回空字符串?

我的代码:

var str = '<td>a</td><td>b</td>';
console.log(str.split(/<\/?td>/g));

即输出["", "a", "", "b", ""].

为什么会出现空字符串?

引用https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split

如果分隔符是包含捕获括号的正则表达式,则每次匹配分隔符时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中。但是,并非所有浏览器都支持此功能。

然而,这显然不相关,因为捕获括号不存在。


动漫人物
浏览 119回答 2
2回答

达令说

让我们看一个更简单的例子:",a,,b,".split(",") //&nbsp;["",&nbsp;"a",&nbsp;"",&nbsp;"b",&nbsp;""]这和你的案子有什么关系?好吧,如果您有两个彼此相邻的分隔符(一个前导分隔符或一个尾随分隔符),您将在结果中得到一个空字符串,因为这就是它们之间的内容(并且为了维持应该 equal 的行为x.split(a).join(a))x。在您的情况下,两者</td>和<td>in the middle 都是匹配的,这意味着有 2 个“分隔符”彼此相邻,导致中间为空字符串。开头<td>的 和</td>结尾的 导致前导和尾随分隔符,从而导致开头和结尾的空字符串。

神不在的星期二

另一个答案给了你原因,我会给你一个快速的解决方案。如果您想从字符串中删除“<td>”和“</td>”,只需将它们替换为空(删除它们)即可。然后拆分你的子字符串。str.replace(/<\/?td>/g,&nbsp;"").split("")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript