如何从string中删除所有换行符?

我有一个textarea中的文本,我用.value属性读出来。 现在我想从我的文本中删除所有的换行符(当你按下input时产生的字符),现在使用.replace和一个正则expression式,但是如何在正则expression式中指定一个换行符? 如果这是不可能的,还有别的办法吗?

这可能是一个常见问题。 无论如何,换行符(更好:换行符)可以是回车符(CR, \r ,在旧的Mac上),换行符(LF, \n ,在Unices包括Linux上)或CR后跟LF( \r\n ,在WinDOS上)。 (与另一个答案相反,这与字符编码无关 。)

因此,最有效的RegExp文字匹配所有变种是

 /\r?\n|\r/ 

如果要匹配string中的所有换行符,请使用全局匹配,

 /\r?\n|\r/g 

分别。 然后按照几个其他答案中的build议继续进行replace方法。 (也许你不想删除换行符,而是用其他空白符replace,例如空格字符,这样字就保持不变。)

在不同的操作系统编码之间,你如何find一个换行符。 Windows将是\ r \ n,但Linux只使用\ n和苹果使用\ r。

我发现这在JavaScript换行符

 someText = someText.replace(/(\r\n|\n|\r)/gm,""); 

这应该删除各种换行符。

String.trim()从string的开头和结尾删除空格…包括换行符。

 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/

注意! 它只修剪string的开始和结束,而不是在string中间的换行符或空格。

您可以在正则expression式中使用\n作为换行符, \r用于回车符。

 var str2 = str.replace(/\n|\r/g, ""); 

不同的操作系统使用不同的行尾,以及\n\r不同混合。 这个正则expression式将取代所有。

如果你想删除所有的控制字符,包括CR和LF,你可以使用这个:

 myString.replace(/[^\x20-\x7E]/gmi, "") 

它将删除所有不可打印的字符。 这是所有字符不在ASCIIhex空格0x20-0x7E 。 随意根据需要修改HEX范围。

 var str = "bar\r\nbaz\nfoo"; str.replace(/[\r\n]/g, ''); >> "barbazfoo" 

在正则expression式中的换行符是\ n,所以你的脚本将是

 var test = 'this\nis\na\ntest\nwith\newlines'; console.log(test.replace(/\n/g, ' ')); 

试试这个代码,适用于所有平台:

 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' 

PointedEars提供的答案是我们大多数人需要的。 但是通过关注Mathias Bynens的回答,我进行了一次维基百科之旅,发现这一点: https ://en.wikipedia.org/wiki/Newline。

以下是实现上述Wiki页面在此答案时认为“新行”的所有内容的embedded式函数。

如果有什么东西不适合你的情况,只要将其删除即可。 另外,如果你正在寻找性能,这可能不是这样,但对于一个快速的工具,无论如何,这应该是有用的。

 // 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`) }); 

最简单的解决scheme是:

 let str = '\t\n\r this \n \t \r is \ra \n test \t \r \n'; str.replace(/\s+/g, ' ').trim(); console.log(str); // logs: "this is a test" 

.replace()/\s+/gexpression式是将所有的空白字符组改为整个string中的一个空格,然后我们使用.trim()结果去除文本前后所有超出的空格。

被视为空白字符:
[ \f\n\r\t\v​\u00a0\u1680​\u2000​-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]

要删除新的线字符使用:

 yourString.replace(/\r?\n?/g, '') 

然后,您可以修剪您的string以删除前导和尾随空格:

 yourString.trim()