разделите строковое значение, но сохраните разрыв строки внутри нового массива

#javascript #regex #split #line-breaks

Вопрос:

Я хочу сохранить разрывы строк после того, как я выполню некоторую логику в своем строковом значении для элемента textarea. Допустим, у меня есть эта строка из моего текстового поля:

 "Test

Newline here"
 

массив: ["TestnNewline", "here"]

Как я могу сохранить это, чтобы все было так: ["Test", "n", "Newline", "here"]

Мой код:

 let bodyText = "Test

Newline here"

let bodyTextArray = bodyText.split(/ |n|(?=n)/g)
 

В основном то, что происходит, это разделение и удаление пробелов и «n». использование положительного взгляда не работает, я пытался с отрицательным взглядом вперед, но безуспешно.

Есть какие-нибудь идеи?

Ответ №1:

Вы можете сопоставить эти:

 let bodyText = `Test

Newline here`
let bodyTextArray = bodyText.match(/^n|S /gm)
console.log(bodyTextArray) 

Подробные сведения:

  • ^n — начало строки и новая строка
  • | — или
  • S — любой один или несколько символов без пробелов.

Для поддержки окончаний строк CRLF, LF или CR используйте

 /^(?:rn?|n)|S /gm
 

где (?:rn?|n) заменяется n и соответствует либо CR и необязательному символу LF, либо просто символу LF.

Ответ №2:

Тебе это нужно

 let bodyText = "Test
Newline here"
let bodyTextArray = bodyText.split(/( |n)/)
 

Если вы разместите захват () вокруг того, на чем вы разделяетесь, это будет добавлено к выходу

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

1. Похоже, это не дает результата, запрошенного операцией. Но это было помечено как принятое.!!

Ответ №3:

Вы можете использовать разделение с помощью этого регулярного выражения:

 /(n) |s /
 

Код:

 const input = `Test

Newline here`;

var arr = input.split(/(n) |s /);

console.log(arr.filter(Boolean)); 

Объяснение:

  • /(n) |s / разбивает ввод на 1 новых строк, захватывая одну новую строку (чтобы сделать n доступной в выходном массиве после разделения) или 1 пробел
  • .filter(Boolean) удаляет пустые или неопределенные записи из массива