.split(/ ^ | \ s + /)和.split(/ s + /)

时间:2019-02-11 13:54:42

标签: javascript regex d3.js

我正在读取d3的源代码,在this lines中,他们尝试将事件名称逐字分割。但是为什么他们在其中使用^| 这个^|\s+正则表达式?当string.trim().split(/^|\s+/)string.trim().split(/\s+/)给出差异结果时?

1 个答案:

答案 0 :(得分:4)

如果字符串不是以空格开头,则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中进行了描述。因此,将第一个空格包含在第一个数组项中可能被视为“技巧”。