Разбить текст по нескольким разделителям
Есть некоторые слова, по которым надо разбить текст на массив - можно сказать, split с несколькими разделителями.
reg = new RegExp(['Слово_1', 'Слово_2'].join(' | '), 'i');
res = 'Слово_2 123 Слово_1 456 Слово_1 789 Слово_2 101112'.split(reg);
console.log(reg);
console.log(res);
Если разделители в тексте идут не по порядку, то функция отказывается правильно работать. Подскажите, как решить проблему.
https://jsfiddle.net/e2nd0bz5/
Ответы (2 шт):
Автор решения: vsemozhebuty
→ Ссылка
Думаю, пробелы в регулярке влияют на результат, потому что, например, перед первым разделителем пробела нет, а регулярка его требует.
Можно заменить пробелы упрощённым юникодным вариантом символа \b:
const reg = new RegExp(
['Слово_1', 'Слово_2']
.map(word => `(?<!\\p{L})${word}(?!\\p{L})`)
.join('|'),
'iu');
const res = 'Слово_2 123 Слово_1 456 Слово_1 789 Слово_2 101112'.split(reg);
console.log(reg);
console.log(res);
Автор решения: Igor
→ Ссылка
let reg = new RegExp(/\s*Слово_1\s*|\s*Слово_2\s*/i);
let res = 'Слово_2 123 Слово_1 456 Слово_1 789 слово_2 101112'.split(reg);
console.log(reg);
console.log(res);