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