我正在阅读 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/