如何从字符串中删除所有换行符

我在textarea中有一个文本,我使用.value属性读取它。

现在我想从我的文本中删除所有的换行符(当你按输入时产生的字符)现在使用正则表达式替换,但我如何在正则表达式中指示换行符?

如果不可能,还有别的办法吗?

903362 次浏览

你可以在正则表达式中用\n表示换行,用\r表示回车。

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

不同的操作系统使用不同的行结束符,使用不同的\n\r组合。这个正则表达式将全部替换。

regex中的换行符是\n,因此您的脚本将是

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

如何找到换行符在不同的操作系统编码中是不同的。Windows应该是\r\n,但Linux只使用\n,苹果使用\r

我在JavaScript换行符中找到了这个:

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

这应该会删除所有的换行符。

换行符(最好是换行符)可以是回车符(CR, \r,在旧的mac上),换行符(LF, \n,在unix包括Linux上)或CR后面跟着LF (\r\n,在windows上)。(与另一个答案相反,这与没有什么字符编码有关。)

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

/\r?\n|\r/

如果你想匹配字符串中的所有换行符,使用全局匹配,

/\r?\n|\r/g

分别。然后继续使用其他几个答案中建议的replace方法。(可能您确实希望删除换行符,但将它们替换为其他空白字符,例如空格字符,以便单词保持完整。)

var str = " \n this is a string \n \n \n"


console.log(str);
console.log(str.trim());

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/

注意!它只修饰字符串的开头和结尾,不修饰字符串中间的换行符或空格。

var str = "bar\r\nbaz\nfoo";


str.replace(/[\r\n]/g, '');


>> "barbazfoo"

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

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

它将删除所有不可打印的字符。这是所有字符在ASCII十六进制空间0x20-0x7E。请根据需要随意修改HEX范围。

试试下面的代码。它适用于所有平台。

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提供的答案是我们大多数人需要的一切。但根据马赛厄斯·拜恩斯的回答,我在维基百科上找到了这个:https://en.wikipedia.org/wiki/Newline

下面是一个下拉函数,它实现了上面Wiki页面在回答这个问题时考虑的所有“新行”。

如果有些东西不适合你的情况,就把它去掉。此外,如果您正在寻找性能,这可能不是它,但对于一个快速的工具,在任何情况下完成工作,这应该是有用的。

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

最简单的解决方案是:

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

.replace()/\s+/g regexp正在将所有组的空白字符更改为整个字符串中的单个空格,然后我们将.trim()的结果删除文本前后所有超出的空白。

认为是空白字符:
# EYZ0 < / p >

要删除新的行字符,使用以下命令:

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

然后你可以删除字符串的前导和尾随空格:

yourString.trim()

我正在添加我的答案,这只是上面的一个插件, 至于我,我尝试了所有的/n选项,它没有工作,我看到我的文本来自服务器,双斜杠,所以我使用这个:

var fixedText = yourString.replace(/(\r\n|\n|\r|\\n)/gm, '');

使用下面的函数,让您的生活变得简单

最简单的方法是使用正则表达式来检测和替换字符串中的换行符。在这种情况下,我们使用replace函数和要替换的字符串,在我们的情况下是一个空字符串。

function remove_linebreaks( var message ) {
return message.replace( /[\r\n]+/gm, "" );
}

在上面的表达式中,g和m是全局和多行标记

在mac上,只需在regexp中使用\n来匹配换行符。所以代码将是string.replace(/\n/g, ''), ps:后面的g意味着匹配所有而不仅仅是第一个。

在windows上,它将是\r\n

这将用空格替换换行符。

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

阅读更多关于的文章。

如果你不需要使用str.replace(/(\r\n|\n|\r)/gm, "")的htm字符&nbsp shile,你可以使用str.split('\n').join('');

干杯

简单,我们可以使用text.replace(/\n/g, " ")删除新行

const text = 'Students next year\n GO \n For Trip \n';
console.log("Original : ", text);


var removed_new_line = text.replace(/\n/g, " ");
console.log("New : ", removed_new_line);

Const text = 'test\nwith\nline\nbreaks'

const textwithoutbreak = text.split('\n')。加入(' ')

我经常在jsons中的(html)字符串中使用这个正则表达式:

# EYZ0

字符串来自CMS或i18n php的html编辑器。常见的场景有:

- lorem(.,)\nipsum
- lorem(.,)\n ipsum
- lorem(.,)\n
ipsum
- lorem   ipsum
- lorem\n\nipsum
- ... many others with mixed whitespaces (\t\s) and even \r

正则表达式避免了这些丑陋的事情:

lorem\nipsum    => loremipsum
lorem,\nipsum   => lorem,ipsum
lorem,\n\nipsum => lorem,  ipsum
...

当然不是所有的用例,也不是最快的用例,但对于大多数文本区域和网站或web应用程序的文本来说已经足够了。

方式1:

const yourString = 'How are you \n I am fine \n Hah'; // Or textInput, something else


const newStringWithoutLineBreaks = yourString.replace(/(\r\n|\n|\r)/gm, "");

方式2:

const yourString = 'How are you \n I am fine \n Hah'; // Or textInput, something else


const newStringWithoutLineBreaks = yourString.split('\n').join('');