555

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

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

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

4

20 回答 20

649

您如何找到换行符因操作系统编码而异。Windows 将是\r\n,但 Linux 只是使用\n和 Apple 使用\r

我在JavaScript 换行符中发现了这一点:

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

那应该删除各种换行符。

于 2012-05-29T19:10:47.083 回答
594

换行符(更好:换行符)可以是回车符(CR, \r, 在较旧的 Mac 上)、换行符(LF, \n, 在 Unices incl. Linux 上)或 CR 后跟 LF(\r\n在 WinDOS 上)。(与另一个答案相反,这与字符编码无关。)

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

/\r?\n|\r/

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

/\r?\n|\r/g

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

于 2012-05-29T19:18:29.860 回答
149

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/

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

于 2014-06-12T22:43:18.397 回答
73

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

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

不同的操作系统使用不同的行尾,以及 和 的不同\n混合\r。此正则表达式将全部替换。

于 2012-05-29T19:09:03.780 回答
40

最简单的解决方案是:

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正则表达式将所有空白字符组更改为整个字符串中的单个空格,然后我们.trim()的结果是删除文本前后所有超出的空白。

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

于 2017-07-11T08:26:26.030 回答
22

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

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

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

于 2016-02-06T21:03:36.113 回答
17
var str = "bar\r\nbaz\nfoo";

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

>> "barbazfoo"
于 2016-01-21T16:24:06.293 回答
17

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

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

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

yourString.trim()
于 2017-10-06T10:21:13.493 回答
16

这将用空格替换换行符。

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

阅读更多关于这篇文章。

于 2020-09-10T05:48:49.610 回答
11

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

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

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

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

于 2019-12-16T16:18:35.197 回答
9

PointedEars 提供的答案是我们大多数人需要的一切。但是通过遵循 Mathias Bynens 的回答,我进行了一次维基百科之旅,发现了这个: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`)
});
于 2017-06-08T14:24:16.647 回答
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);

于 2021-01-20T06:39:01.240 回答
5

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

var test = 'this\nis\na\ntest\nwith\newlines';
console.log(test.replace(/\n/g, ' '));
于 2012-05-29T19:09:03.930 回答
5

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

var fixedText = yourString.replace(/(\r\n|\n|\r|\\n)/gm, '');
于 2019-07-07T12:36:02.117 回答
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'
于 2017-04-28T21:21:47.657 回答
2

如果碰巧你不需要这个 htm characte &nbspshile 使用str.replace(/(\r\n|\n|\r)/gm, "")你可以使用这个str.split('\n').join('');

干杯

于 2020-09-10T05:59:52.903 回答
2

我经常将这个正则表达式用于 jsons 中的 (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

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

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

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

于 2021-12-05T11:04:29.200 回答
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, "");

第二种方式:

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

const newStringWithoutLineBreaks = yourString.split('\n').join('');
于 2022-02-18T17:02:06.687 回答
0

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

在 Windows 上,它将是\r\n.

于 2020-03-07T09:31:20.903 回答
-3

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

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

于 2021-07-27T22:33:49.277 回答