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

IT技术 javascript regex string
2021-01-24 05:04:52

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

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

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

6个回答

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

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

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

这应该删除各种换行符。

当使用 /[\n\r]/g 从 node.js 中的 memcached 解析返回的数据时,我成功了。感谢 Gone Coding!答案中的选项扼杀了它。
2021-03-16 05:04:52
为什么具有独立\r\n \n \r不仅仅是更好/[\n\r]/g这当然比它应该的要慢,因为它只需要根据两个可能的选项集检查每个字符。
2021-03-28 05:04:52

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

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

/\r?\n|\r/

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

/\r?\n|\r/g

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

为了完整起见,需要注意的是Unicode中有四种不同的换行符:\u000aor \n,是换行符;\u000d\r,这是一个回车;\u2028, 行分隔符;\u2029,段落分隔符。但实际上,您发布的正则表达式在大多数情况下就足够了。
2021-03-27 05:04:52
@MathiasBynens因为U + 2028和U + 2029不构成HTML换行符(4.01),即分配并没有与任何主要的DOM实现和布局引擎显示textarea的两行。因此,没有人会首先做出这样的分配。
2021-03-30 05:04:52
@CrabBucket 不客气。但是你的修改只有在字符串中文字(已经转义)“\r”和“\n”时才有效,或者如果代码被传递给eval()或类似的东西(你应该避免)。
2021-04-05 05:04:52
@MathiasBynens 谢谢,但 U+2028 和 U+2029 明确构成 HTML (4.01) 中的换行符,DOM 树和 textarea 的实时值基于:w3.org/TR/html4/struct/text.html #空白
2021-04-07 05:04:52
@PointedEars 是的,但是在.value动态设置文本区域时不会发生 HTML 序列化,例如textarea.value = 'a\u2029b'; textarea.value.charAt(1) == '\u2029'; // true. 但这可能是一种边缘情况——正如我所说,在大多数情况下,您的正则表达式就足够了。
2021-04-09 05:04:52

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/

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

是的,只是作为一个选项添加。
2021-03-13 05:04:52
为我需要的东西工作——字符串的开头和结尾。谢谢!
2021-03-24 05:04:52
这只会从字符串的开头和结尾删除换行符。OP 询问如何删除所有换行符。
2021-03-27 05:04:52

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

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

不同的操作系统使用不同的行结尾,具有变化的混合物\n\r这个正则表达式将全部替换它们。

不确定这是否是投诉。它按照我说的做:删除不在该十六进制范围内的所有内容。什么字符当然取决于字符集,但这篇文章是关于 ASCII 的。
2021-03-25 05:04:52
/\n|\r/g/[\n\r]/g甚至更有效地编写/[\n\r]+/g除非绝对需要,否则避免交替。
2021-04-08 05:04:52
我认为这只会取代第一次出现
2021-04-10 05:04:52

最简单的解决方案是:

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]

太棒了,但我可以重新分配变量: str = str.replace(/\s+/g, ' ').trim();
2021-03-24 05:04:52