javascript - .split(/^|\s+/) 和 .split(/s+/) 之间的区别

标签 javascript regex d3.js

我正在阅读 d3 的源代码,在 this lines 中他们尝试按单词拆分事件名称。但为什么他们在中使用 ^| 这个 ^|\s+ 正则表达式?当 string.trim().split(/^|\s+/)string.trim().split(/\s+/) 时,它们会给出不同的结果吗?

最佳答案

如果字符串不以空格开头,则 split 行为没有区别:

console.log("a b c".split(/\s+/))
// => ["a", "b", "c"]
console.log("a b c".split(/^|\s+/))
// => ["a", "b", "c"]

如果开头有空格,则输出不同:

console.log(" a b c".split(/^|\s+/))
// => [" a", "b", "c"]
console.log(" a b c".split(/\s+/))
// => ["", "a", "b", "c"]

原因是匹配空字符串会导致 JS 正则表达式引擎跳过下一个字符。它在 this answer of mine 中有描述。 。因此,将第一个空格包含到第一个数组项中可能被认为是一个“技巧”。

关于javascript - .split(/^|\s+/) 和 .split(/s+/) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54632107/

相关文章:

javascript - 我的谷歌云功能有 promise 问题

c# - 正则表达式不允许连续 3 个字符

javascript - 获取查询选择器值 d3.js

javascript - 如何使Cordova同步

javascript - jQuery 不返回新的数据属性

regex - 使用 Scala 模式匹配时工作正则表达式失败

php - 替换 CSV 中的换行符

javascript - 动态在折线图中绘制多条线

javascript - 在圆形 PNG 背景上禁用 D3 缩放

javascript - React Router、Redux 和异步 API 调用