Как удалить только последнюю новую строку с регулярным выражением в JavaScript - PullRequest
1 голос
/ 12 марта 2019

У меня есть такой файл:

const stringToTest = ' test1\n test2\n test3\n \n \n'

Вывод, который я хочу получить:

stringTransformed = 'test1\n test2\n test3\n \n'

, другими словами, я хочу избавиться только от ПОСЛЕДНЕГО пустого пространстваи новая строка:

' \n'

Я попробовал следующее:

stringToTest.replace(/\s+\n$/, '')

, но он удаляет все пробелы и новые строки в конце файла.

Iзнаю, что я могу сделать это с помощью split и join, но я бы предпочел делать это с помощью регулярных выражений, поскольку это намного быстрее, а иногда мои строки действительно большие, поэтому я не хочу разбивать их на массивы.

1 Ответ

2 голосов
/ 12 марта 2019

Ваш шаблон \s соответствует любому пробелу.Если вы вычтете из него символы CR и LF, вы будете сопоставлять только горизонтальные пробелы.

Таким образом, вы можете использовать

replace(/[^\S\n\r]*\n$/, '')

Или, чтобы также обрабатывать окончания CRLF:

replace(/[^\S\n\r]*\r?\n$/, '')

Заметьте, я изменил + на * квантификатор, чтобы также удалить последний разрыв строки, если в строке перед последней новой строкой нет горизонтальных символов пробела.

JS demo:

const stringToTest = ' test1\n test2\n test3\n \n \n';
console.log(stringToTest.replace(/[^\S\n\r]*\n$/, ''));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...