如何从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+/g
expression式是将所有的空白字符组改为整个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()