Разделять строку пробелами, но не пробелами внутри новых строк, и сохранять новые строки

#javascript #regex

#javascript #регулярное выражение

Вопрос:

У меня есть строка, подобная этой:

 "word1 word2 ngroup of wordsn"
  

Мне нужно разделить ее пробелами, за исключением пробелов, которые встречаются между 2 n , и сохранить n символ. Таким образом, результатом будет такой массив:

 [
 "word1",
 "word2",
 "ngroup of wordsn"
]
  

Я нашел результаты, которые дают то же самое с , помощью вместо n , но я не могу заменить его каким-либо другим символом.

В настоящее время я использую приведенный ниже код, но он не сохраняет n .

 input.split('n').flatMap((s,i)=>i%2?`n${s.trim()}n`:s.trim().split(' ')).filter(v=>v)
  

Примечания:

Если перед входной строкой есть слова n , перед ней всегда будет пробел, т. Е. Строка может содержать word1 ngroup 1n , но никогда word1ngroup 1n

Строка также может содержать несколько групп, например word1 ngroup 1n word2 ngroup 2n

Ответ №1:

Вы можете использовать

 const text = "word1 word2 ngroup of wordsn";
console.log(text.match(/n.*n|S /g))  

/n.*n|S /g Шаблон соответствует нескольким вхождениям

  • n.*n — символ перевода строки, затем любые 0 или более символов, кроме символов разрыва строки (как можно больше), а затем перевод строки
  • | — или
  • S — 1 или более символов, не содержащих пробелов.

Смотрите демонстрацию регулярных выражений.