我的代码: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,如果分隔符是包含捕获括号的正则表达式,则每次匹配分隔符时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中。但是,并非所有浏览器都支持此功能。然而,这显然不相关,因为捕获括号不存在。
2 回答
达令说
TA贡献1821条经验 获得超6个赞
让我们看一个更简单的例子:
",a,,b,".split(",") // ["", "a", "", "b", ""]
这和你的案子有什么关系?好吧,如果您有两个彼此相邻的分隔符(一个前导分隔符或一个尾随分隔符),您将在结果中得到一个空字符串,因为这就是它们之间的内容(并且为了维持应该 equal 的行为x.split(a).join(a)
)x
。在您的情况下,两者</td>
和<td>
in the middle 都是匹配的,这意味着有 2 个“分隔符”彼此相邻,导致中间为空字符串。开头<td>
的 和</td>
结尾的 导致前导和尾随分隔符,从而导致开头和结尾的空字符串。
神不在的星期二
TA贡献1963条经验 获得超6个赞
另一个答案给了你原因,我会给你一个快速的解决方案。如果您想从字符串中删除“<td>”和“</td>”,只需将它们替换为空(删除它们)即可。然后拆分你的子字符串。
str.replace(/<\/?td>/g, "").split("")
添加回答
举报
0/150
提交
取消