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

Win*_*ade 384 javascript regex string

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

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

如果那是不可能的,还有另外一种方法吗?

小智 460

如何找到换行符在操作系统编码之间有所不同.Windows会是\r\n,但Linux只是使用\n和Apple使用\r.

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

someText = someText.replace(/(\r\n|\n|\r)/gm, "");
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么单独的`\ r \n \n**和*`\n`*和*`\ r``只比`/ [\n\r]/g`更好?当然这比它应该慢,因为它只需要根据两个可能选项的集合检查每个字符. (15认同)
  • 当使用 /[\n\r]/g 从 node.js 中的 memcached 解析返回的数据时,对我有用。感谢 Gone Coding!答案中的选项扼杀了它。 (3认同)

Poi*_*ars 440

这可能是常见问题解答.总之,换行符(更好:新行)可以回车之一(CR, \r,老的Mac上),换行(LF,\n上Unix系统的Linux含)或CR其次是LF(\r\n上WINDOS).(与另一个答案相反,这与字符编码无关.)

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

/\r?\n|\r/
Run Code Online (Sandbox Code Playgroud)

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

/\r?\n|\r/g
Run Code Online (Sandbox Code Playgroud)

分别.然后replace按照其他几个答案中的建议继续进行.(也许你并不想删除换行符,但与其他空格替换它们,例如空格字符,这样的话保持不变.)

  • 为了完整起见,应该注意Unicode中有四个不同的新行字符:`\ u000a`或`\n`,它是一个换行符; `\ u000d`或`\ r``,这是一个回车; `\ u2028`,一个行分隔符; 和`\ u2029`,段落分隔符.但实际上,在大多数情况下,您发布的正则表达式就足够了. (13认同)
  • @PointedEars是的,但动态设置textarea的`.value`时不会发生HTML序列化,例如`textarea.value ='a\u2029b'; textarea.value.charAt(1)=='\ u2029'; //真.但这可能是一个边缘案例 - 正如我所说的,在大多数情况下你的正则表达式就足够了. (5认同)
  • @MathiasBynens谢谢,但是U + 2028和U + 2029显然不构成HTML(4.01)中的换行符,DOM树和textarea的实时值基于:http://www.w3.org/TR/html4 /struct/text.html#whitespace (4认同)
  • @MathiasBynens因为U + 2028和U + 2029不构成HTML(4.01)中的换行符,所以该赋值不会在textarea中显示两行,并且具有任何主要的DOM实现和布局引擎.因此,没有一个心智正常的人会首先做出这样的任务. (2认同)
  • @CrabBucket 不客气。但是你的修改只有在字符串中有 *literal*(已经 *escaped*)“\r”和“\n”时才有效,或者如果代码被传递给 `eval()` 或类似的东西(你应该避免)。 (2认同)

Rob*_*obW 99

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!!!"
Run Code Online (Sandbox Code Playgroud)

这是一个小例子:http://jsfiddle.net/BLs8u/

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

  • 这仅从字符串的开头和结尾删除换行符.OP询问如何删除所有换行符. (28认同)
  • 是的,只需添加一个选项. (4认同)
  • 为我需要的东西工作——字符串的开头和结尾。谢谢! (2认同)

Ken*_*rey 42

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

var str2 = str.replace(/\n|\r/g, "");
Run Code Online (Sandbox Code Playgroud)

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

  • `/ \n |\r/g`更有效地写成`/ [\n\r]/g`甚至`/ [\n\r] +/g`.除非您绝对需要,否则请避免交替使用. (5认同)

mas*_*asi 22

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

myString.replace(/[^\x20-\x7E]/gmi, "")
Run Code Online (Sandbox Code Playgroud)

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

  • 这也将从英语以外的语言中删除一些国家字符.... (2认同)

Fre*_*tem 18

最简单的解决方案是:

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"
Run Code Online (Sandbox Code Playgroud)

.replace()使用/\s+/gregexp将所有空白字符更改为整个字符串中的单个空格,然后我们.trim()将结果删除文本之前和之后的所有超出空格.

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


小智 15

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

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

>> "barbazfoo"
Run Code Online (Sandbox Code Playgroud)


小智 15

这将用空格替换换行符。

someText = someText.replace(/(\r\n|\n|\r)/gm,"");
Run Code Online (Sandbox Code Playgroud)

阅读更多关于这篇文章。


Si7*_*ius 14

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

yourString.replace(/\r?\n?/g, '')
Run Code Online (Sandbox Code Playgroud)

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

yourString.trim()
Run Code Online (Sandbox Code Playgroud)


aPr*_*ger 12

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

replace(/[\n\r\t\s]+/g, ' ')

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

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

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

lorem\nipsum    => loremipsum
lorem,\nipsum   => lorem,ipsum
lorem,\n\nipsum => lorem,  ipsum
...
Run Code Online (Sandbox Code Playgroud)

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


小智 10

使用下面的这个功能,让你的生活更轻松

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

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

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


Roh*_*iya 8

很简单,我们可以使用删除新行 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);
Run Code Online (Sandbox Code Playgroud)


fut*_*.co 6

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

以下是一个drop-in函数,它实现了上述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`)
});
Run Code Online (Sandbox Code Playgroud)

  • 首先 - 对于那些不使用JS的人来说 - "大多数"RE风味支持`\ R`这是"所有"换行.其次 - 为什么不简单地`someString.replace(new RegExp(lineTerminators.join('|')),'');` (2认同)

h2o*_*ooo 5

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

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


cha*_*a D 5

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

var fixedText = yourString.replace(/(\r\n|\n|\r|\\n)/gm, '');
Run Code Online (Sandbox Code Playgroud)