#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)
удаляет пустые или неопределенные записи из массива