为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

动漫人物 2023-11-02 17:27:13
我的代码: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>结尾的 导致前导和尾随分隔符,从而导致开头和结尾的空字符串。


查看完整回答
反对 回复 2023-11-02
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

另一个答案给了你原因,我会给你一个快速的解决方案。如果您想从字符串中删除“<td>”和“</td>”,只需将它们替换为空(删除它们)即可。然后拆分你的子字符串。

str.replace(/<\/?td>/g, "").split("")


查看完整回答
反对 回复 2023-11-02
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信