我正在读取d3
的源代码,在this lines中,他们尝试将事件名称逐字分割。但是为什么他们在其中使用^|
这个^|\s+
正则表达式?当string.trim().split(/^|\s+/)
和string.trim().split(/\s+/)
给出差异结果时?
答案 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中进行了描述。因此,将第一个空格包含在第一个数组项中可能被视为“技巧”。