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

时间:2012-05-29 19:05:35

标签: javascript regex string

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

现在我想删除所有换行符(当你按输入时产生的字符),现在使用带有正则表达式的.replace删除我的文本,但是如何在一个表达式中指明换行符正则表达式?

如果不可能,还有其他办法吗?

18 个答案:

答案 0 :(得分:415)

如何在操作系统编码之间找到换行符。 Windows将为\r\n,但Linux只使用\n而Apple则使用\r

我在JavaScript line breaks中找到了这个:

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

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

答案 1 :(得分:393)

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

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

/\r?\n|\r/

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

/\r?\n|\r/g

分别。然后按照其他几个答案中的建议继续replace方法。 (可能你想要删除换行符,但用其他空格替换它们,例如空格字符,以便单词保持不变。)

答案 2 :(得分:91)

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/

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

答案 3 :(得分:35)

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

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

不同的操作系统使用不同的行结尾,\n\r的混合不同。这个正则表达式将取代它们。

答案 4 :(得分:21)

如果要删除所有控制字符,包括CR和LF,可以使用:

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

它将删除所有不可打印的字符。 This are ASCII HEX空间0x20-0x7E内的所有字符 NOT 。您可以根据需要随意修改HEX范围。

答案 5 :(得分:15)

最简单的解决方案是:

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() regexp的

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

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

答案 6 :(得分:14)

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

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

>> "barbazfoo"

答案 7 :(得分:13)

要删除新的行号,请使用:

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

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

yourString.trim()

答案 8 :(得分:7)

很简单,我们可以使用 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);

答案 9 :(得分:5)

正则表达式中的换行符是\ n,因此您的脚本将是

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

答案 10 :(得分:5)

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

以下是一个插件函数,它实现了上述Wiki页面所考虑的所有内容" new line"在回答这个问题时。

如果某些内容不适合您的情况,请将其删除。此外,如果你正在寻找性能,这可能不是它,但对于在任何情况下完成工作的快速工具,这应该是有用的。

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

答案 11 :(得分:4)

这将用空格替换换行符。

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

详细了解this文章。

答案 12 :(得分:2)

如果碰巧不需要使用&nbsp的htm特性str.replace(/(\r\n|\n|\r)/gm, ""),则可以使用此str.split('\n').join('');

欢呼

答案 13 :(得分:2)

尝试以下代码。它适用于所有平台。

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'

答案 14 :(得分:1)

我正在添加我的答案,这只是上述内容的一个附加内容, 对于我来说,我尝试了所有/ n选项,但是它没有用,我看到我的文本来自服务器,并带有双斜杠,因此我使用了以下方法:

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

答案 15 :(得分:0)

在下面使用此功能并轻松生活

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

// query `<li>` elements and create an array of html elements
const listItems: HTMLLIElement[] = Array.from(document.querySelectorAll('li'));
// create array of `string[]` of the text content of each element
const values: (string | null)[] = listItems.map(el => el.textContent);
// execute splice on the new `string[]` array
values.splice(0, 0, '');

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

答案 16 :(得分:0)

在Mac上,只需在正则表达式中使用\n即可匹配换行符。因此代码将是string.replace(/\n/g, ''),ps:后面的g表示匹配所有而不是仅匹配第一个。

在Windows上,它将为\r\n

答案 17 :(得分:-1)

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

const textWithoutBreaks = text.split('\n').join(' ')