Разница между .split (/ ^ | \ s + /) и .split (/ s + /) - PullRequest
0 голосов
/ 11 февраля 2019

Я читаю исходный код d3 и в этой строке они пытаются разделить имя события по словам.Но почему они используют ^| в этом ^|\s+ регулярном выражении?Когда string.trim().split(/^|\s+/) и string.trim().split(/\s+/) дают результаты разницы?

1 Ответ

0 голосов
/ 11 февраля 2019

Если строка не начинается с пробелов, нет разницы в поведении 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 пропускает следующий символ.Это описано в этом моем ответе .Таким образом, это может считаться «уловкой» для включения первого пробела в первый элемент массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...