Одно регулярное выражение для удаления пустых строк и двойных пробелов из многострочного ввода - PullRequest
0 голосов
/ 29 января 2020

Я хотел бы объединить две функции регулярных выражений для очистки некоторого ввода textarea. Интересно, если это вообще возможно, или я должен оставить его двумя отдельными (которые работают нормально, но выглядят не так красиво или чисто).

Я настроил так, чтобы они использовали глобальный и многострочный ( /gm) и заменены ничем (''). Я пытался использовать скобки и вертикальные / или линии в любой позиции, но это никогда не дает ожидаемого результата, поэтому я могу только предположить, что есть способ, который я упустил или должен оставить его как есть.

Regex 1: /^\s+[\r\n]/gm

Regex 2: /^\s+| +(?= )|\s+$/gm

В настоящее время в JavaScript: string.replace(/^\s+[\r\n]/gm,'').replace(/^\s+| +(?= )|\s+$/gm,'')

Цель состоит в том, чтобы удалить:

  • Пустые пробелы в начале и конце каждой строки
  • Пустые строки (включая любые в самом начале и конце)
  • Двойные пробелы

Без этого в конечном итоге на одной и той же линии. Одиночные разрывы строк (\r\n) все еще должны быть в конце.

Regex 1 предназначен для удаления любой пустой строки (^\s+[\r\n]), Regex 2 выполняет обрезку пробелов в начале (^\s+) и конец (\s+$) и удаляет двойные (и тройные, четырехкратные и т. д. c) пробелы между (+(?= )).

Ввод:


   Let's  
make   this
 look

 a    little


    nicer   
  and 
more   

readible


Вывод:

Let's
make this
look
a little
nicer
and
more
readible

Редактировать: Большое спасибо Wiktor Stribiżew и его комментарию за это полное решение:

/^\s*$[\r\n]*|^[^\S\r\n]+|[^\S\r\n]+$|([^\S\r\n]){2,}|\s+$(?![^])/gm

1 Ответ

1 голос
/ 29 января 2020

Я бы предложил следующее выражение с шаблоном подстановки "$1$2" ( demo ):

/^\s*|\s*$|\s*(\r?\n)\s*|(\s)\s+/g

Объяснение:

  • ^\s* - соответствует пробелу в начале текста
  • \s*$ - соответствует пробелу в конце текста
  • \s*(\r?\n)\s* - соответствует пробелу между двумя словами расположен в разных строках, захватывает один CRLF для группы $1
  • (\s)\s+ - захватывает первый символ пробела в последовательности из 2+ символов пробела для группы $2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...