javascript: результат 'yoyoyoyo'.split (' y '), ожидается, что будет [' ',' o ',' ',' o ',' ',' o ',' ',' o '], вместо этого увидел['', 'o', 'o', 'o', 'o',] - PullRequest
0 голосов
/ 22 февраля 2019

Непонятное поведение String.split ():

Когда функция split видит строку / символ, соответствующий строке поиска, она автоматически заменяет строку пустой строкой в ​​возвращаемом массиве:

'aaaaa'.split('a'); // returns ['', '', '', '', '']

Но когда я ставлю его другими буквами, то волшебным образом пропадают пара пустых строк:

'abababa'.split('a'); // returns ['', 'b', 'b', 'b', '']

Я знаю, что это можно использовать для разделения слов с помощью

'apples are great'.split(' '); // returns ['apples', 'are', 'great']

Но как насчет добавления дополнительного пробела между словами?

'apples  are  great'.split(' '); // returns ['apples', '', 'are', '', 'great']

Если бы я хотел, чтобы apples are great'.split(' '); возвратил ['apples', '', '', 'are', '', '', 'great'], какие есть варианты, чтобы это произошло?

Ответы [ 2 ]

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

Вы можете ссылаться на MDN Docs для split () здесь - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split:

При обнаружении разделитель удаляется из строки, а подстроки возвращаются в массив.Если разделитель не найден или отсутствует, массив содержит один элемент, состоящий из всей строки.Если разделитель - пустая строка, str преобразуется в массив символов.Если разделитель появляется в начале или конце строки, или в обоих, массив начинается, заканчивается, или оба начинаются и заканчиваются, соответственно, пустой строкой.Таким образом, если строка состоит только из одного экземпляра разделителя, массив состоит из двух пустых строк.

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

Вы могли бы сделать что-то вроде этого.Где вы подходите все слова и все пробелы, а затем сопоставить их.Использование trim вернет пустые строки, если элемент был пробелом.

const res = 'apples  are  great'.match(/\w+|\s/g).map(item=>item.trim());

console.log(res);
...