#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 заменяет любую длину из нескольких пробелов только двумя пробелами. Затем он разбивается на один пробел.