JavaScript: как использовать регулярное выражение для удаления пустых строк из строки? [закрытый]
мне нужно использовать JavaScript для удаления пустых строк в текстовом поле HTML. Пустые строки могут находиться в любом месте textarea
элемент. Пустая строка может быть просто возвратом или пробелами плюс возврат.
Я ожидаю решения регулярного выражения для этого. Вот некоторые я пробовал, но они не работают и не могут понять, почему:
/^s*r?n/g
/^s*r?n$/g
изменить 1
похоже, что решение (я изменил его немного), предложенной aaronman и м. buettner works:
string.replace(/^s*n/gm, "")
кто-то может сказать, почему мое первое регулярное выражение не работает?
Изменить 2
прочитав все полезные ответы, я придумал следующее:
/^[st]*(rn|n|r)/gm
это будет тот, который охватывает все ситуации?
редактировать 3
Это самый краткий, охватывающий все пробелы (пробелы, вкладки) и платформы (Linux, Windows, Мак.)
/^s*[rn]/gm
большое спасибо м. Бюттнер!
3 ответов
ваш шаблон кажется в порядке, вам просто нужно включить многострочный модификатор m
, Так что ^
и $
матч линии начала и окончания, а также:
/^\s*\n/gm
без m
, якоря соответствуют только строкам-началу и концу.
обратите внимание, что вы пропускаете окончания строки Mac (только \r
). Это помогло бы в этом случае:
/^\s*[\r\n]/gm
также обратите внимание, что (в обоих случаях) вам не нужно соответствовать необязательному \r
перед из \n
явно, потому что об этом позаботится \s*
.
As Декс указано в комментарии, это не сможет очистить последнюю строку, если она состоит только из пробелов (и после нее нет новой строки). Способ исправить это-сделать фактическую новую строку необязательной, но включить перед ней якорь конца строки. В этом случае вы do должны соответствовать строке, заканчивающейся правильно, хотя:
/^\s*$(?:\r\n?|\n)/gm
Это должно сделать трюк, который я думаю:
var el = document.getElementsByName("nameOfTextBox")[0];
el.value.replace(/(\r\n|\n|\r)/gm, "");
EDIT: удаляет три типа разрывов.