Разделение (» «) на 3 пробела возвращает 2 пустые строки вместо 1?

#javascript #split #concatenation

#javascript #разделение #конкатенация

Вопрос:

У меня возникли проблемы с пониманием метода разделения, в котором между 2 символами в строке есть 3 пробела. Например, если есть строка, которая выглядит как «a b», и я пытаюсь использовать функцию разделения JS, она вернет [‘a’,»,»,’b’] вместо [‘a’,»,’b’] . Почему это происходит и как мне добиться [‘a’,»,’b’] вместо этого?

 const threeSpaces = 'a   b'
console.log(threeSpaces.split(' '))  

Комментарии:

1. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

2. В вашей строке пять символов. Вы разделяете и получаете все между символом, с которым вы разделили. Итак, a<space1><space2><space3>b вы получаете a , затем содержимое между <space1> , а <space2> затем содержимое между <space2> , а <space3> затем b .

3. "a b".split(/ /)

4. Спасибо за объяснение @VLAZ . Однако в этом случае, как мне получить [‘a’,’ ‘,’b’] ? Есть ли какой-либо другой метод, который может достичь этого?

5. @SalmanA Я пробовал использовать / /, но это просто устранило все пробелы. Вместо этого мне нужно получить пробел посередине

Ответ №1:

Использование регулярных выражений

 /()s /
  

Если разделитель является регулярным выражением с фиксирующими круглыми скобками, то
при каждом совпадении разделителя результаты (включая любые неопределенные
результаты) фиксирующих круглых скобок объединяются в выходной
массив.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split

 const threeSpaces = 'a   b'

console.log(threeSpaces.split(/()s /))  

Комментарии:

1. Вау, я никогда не понимал, как группы захвата работают с разделением.

Ответ №2:

 let threeSpaces = 'a      b';
threeSpaces = threeSpaces.replace(/ss /g, '  ');
const result = threeSpaces.split(' ');
console.log(result);  

Комментарии:

1. Как именно это работает? что означает это регулярное выражение? /ss /g

2. @Squish заменяет любую длину из нескольких пробелов только двумя пробелами. Затем он разбивается на один пробел.