Как удалить все разрывы строк из строки?
У меня есть текст в текстовом поле, и я прочитал его с помощью .атрибут value.
Теперь я хотел бы удалить все разрывы строк (символ, который создается при нажатии enter) из моего текста, который теперь используется .замените регулярным выражением, но как указать разрыв строки в регулярном выражении?
Если это невозможно, есть ли другой способ?
12 ответов:
это, вероятно, FAQ. Во всяком случае, разрывы строк (лучше: новые строки) могут быть одним из возврата каретки (CR,
\r, на старых компьютерах Mac), подача строки (LF,\n, на Unices ВКЛ. Linux) или CR, за которым следует LF (\r\n, на WinDOS). (Вопреки другому ответу, это имеет ничего чтобы сделать с кодировкой символов.)таким образом, наиболее эффективным!--5--> литерал, чтобы соответствовать всем вариантам составляет
/\r?\n|\r/если вы хотите сопоставить все новые строки в строке, используйте глобальный матч,
/\r?\n|\r/gсоответственно. Тогда приступайте к
replaceметод, предложенный в нескольких других ответах. (Вероятно, вы делаете не хотите удалить новые строки, но замените их другими пробелами, например пробелом, чтобы слова оставались нетронутыми.)
как вы найдете разрыв строки зависит от кодировки операционной системы. Окна были бы
\r\n\tно Linux просто использует\nи Apple использует\r.Я нашел это в разрывы строк javascript
someText = someText.replace(/(\r\n\t|\n|\r\t)/gm,"");это должно удалить все виды разрывов строк.
String.trim()удаляет пробелы из начала и конца строк... в том числе и новые строки.const myString = " \n \n\n Hey! \n I'm a string!!! \n\n"; const trimmedString = myString.trim(); console.log(trimmedString); // outputs: "Hey! \n I'm a string!!!"вот пример скрипки:http://jsfiddle.net/BLs8u/
внимание! он только обрезает начало и конец строки, а не строки или пробел в середине строки.
можно использовать
\nв regex строки, и\rдля возврата каретки.var str2 = str.replace(/\n|\r/g, "");различные операционные системы используют различные линейные окончания, с различными смесями
\nи\r. Это регулярное выражение заменит их все.
Если вы хотите удалить все символы, включая CR и LF, вы можете использовать это:
myString.replace(/[^\x20-\x7E]/gmi, "")он удалит все непечатаемые символы. Это все символы не в шестнадцатеричном пространстве ASCII
0x20-0x7E. Не стесняйтесь изменять шестнадцатеричный диапазон по мере необходимости.
чтобы удалить новые символы строки используйте это:
yourString.replace(/\r?\n?/g, '')затем вы можете обрезать строку, чтобы удалить начальные и конечные пробелы:
yourString.trim()
самым простым решением будет:
let str = '\t\n\r this \n \t \r is \r a \n test \t \r \n'; str.replace(/\s+/g, ' ').trim(); console.log(str); // logs: "this is a test"
.replace()С/\s+/gregexp не меняется все группы из пробелов символов в один пробел во всей строке, то мы.trim()результат для удаления всех превышающих пробелов до и после текста.рассматриваются как пробелы символов:
[ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
разрыв строки в регулярном выражении равен \n, поэтому ваш скрипт будет
var test = 'this\nis\na\ntest\nwith\newlines'; console.log(test.replace(/\n/g, ' '));
ответ, предоставленный PointedEars, - это все, что нужно большинству из нас. Но, следуя ответу Матиаса Байненса, я отправился в поездку по Википедии и нашел это:https://en.wikipedia.org/wiki/Newline.
ниже приведена функция drop-in, которая реализует все, что выше вики-страница считает "новой строкой" во время этого ответа.
если что-то не подходит для вашего случая, просто удалите его. Кроме того, если вы ищете производительность, это может быть не так, но для быстрый инструмент, который делает работу в любом случае, это должно быть полезно.
// replaces all "new line" characters contained in `someString` with the given `replacementString` const replaceNewLineChars = ((someString, replacementString = ``) => { // defaults to just removing const LF = `\u{000a}`; // Line Feed (\n) const VT = `\u{000b}`; // Vertical Tab const FF = `\u{000c}`; // Form Feed const CR = `\u{000d}`; // Carriage Return (\r) const CRLF = `${CR}${LF}`; // (\r\n) const NEL = `\u{0085}`; // Next Line const LS = `\u{2028}`; // Line Separator const PS = `\u{2029}`; // Paragraph Separator const lineTerminators = [LF, VT, FF, CR, CRLF, NEL, LS, PS]; // all Unicode `lineTerminators` let finalString = someString.normalize(`NFD`); // better safe than sorry? Or is it? for (let lineTerminator of lineTerminators) { if (finalString.includes(lineTerminator)) { // check if the string contains the current `lineTerminator` let regex = new RegExp(lineTerminator.normalize(`NFD`), `gu`); // create the `regex` for the current `lineTerminator` finalString = finalString.replace(regex, replacementString); // perform the replacement }; }; return finalString.normalize(`NFC`); // return the `finalString` (without any Unicode `lineTerminators`) });
попробуйте этот код, работает на всех платформах:
var break_for_winDOS = 'test\r\nwith\r\nline\r\nbreaks'; var break_for_linux = 'test\nwith\nline\nbreaks'; var break_for_older_mac = 'test\rwith\rline\rbreaks'; break_for_winDOS.replace(/(\r?\n|\r)/gm, ' '); //output 'test with line breaks' break_for_linux.replace(/(\r?\n|\r)/gm, ' '); //output 'test with line breaks' break_for_older_mac.replace(/(\r?\n|\r)/gm, ' '); //output 'test with line breaks'
еще один трюк, если вы хотите получить номера, это использовать
parseFloat()илиparseInt()и он вернет вам красивый номер
Comments