我在一个文本框里有一段文本,使用.value属性将其读出。现在我想使用正则表达式和.replace方法从文本中删除所有的换行符(当你按下Enter键时生成的字符),但是我该如何在正则表达式中指示一个换行符?
如果无法实现这个目标,是否有其他方法可以实现?
我在一个文本框里有一段文本,使用.value属性将其读出。现在我想使用正则表达式和.replace方法从文本中删除所有的换行符(当你按下Enter键时生成的字符),但是我该如何在正则表达式中指示一个换行符?
如果无法实现这个目标,是否有其他方法可以实现?
不同操作系统编码方式下查找换行符的方法各有不同。在Windows中是\r\n
,但Linux只使用\n
,而Apple使用\r
。
我在JavaScript line breaks中找到了这个信息。
someText = someText.replace(/(\r\n|\n|\r)/gm, "");
那应该能够移除所有类型的换行符。
\r\n
、\n
和\r
比只使用/[\n\r]/g
更好?这样做肯定比应该慢,因为它只需要将每个字符与两种可能的选项集进行比较。 - iCollect.it Ltd换行符(更好的称呼是“换行符”)可以是回车符(CR,在旧版 Mac 上为\r
),换行符(LF,在 Unix 包括 Linux 上为\n
)或者 CR 后跟 LF(在 WinDOS 上为\r\n
)。 (与另一个答案相反,这与字符编码无关。)
因此,最有效的 RegExp
字面量来匹配所有变体是
/\r?\n|\r/
如果你想匹配字符串中的所有换行符,请使用全局匹配。
/\r?\n|\r/g
然后按照其他答案中建议的使用replace
方法进行处理(可能您不想删除换行符,而是用其他空格(例如空格字符)替换它们,以保持单词完整性)。
\u000a
或\n
,是换行符;\u000d
或\r
,是回车符;\u2028
,是行分隔符;以及\u2029
,是段落分隔符。然而,在实践中,你发表的正则表达式在大多数情况下已经足够了。 - Mathias Bynens.value
属性时并不会发生 HTML 序列化,例如 textarea.value = 'a\u2029b'; textarea.value.charAt(1) == '\u2029'; // true
。但这可能是一种边缘情况 - 如我所说,在大多数情况下,您的正则表达式是足够的。 - Mathias Bynenseval()
或类似的函数(这应该避免)时才有效。 - PointedEarsvar 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/
注意! 它仅仅裁剪字符串的开头和结尾,而不是中间的换行符或空格。
\n
来表示换行,而 \r
则表示回车。var str2 = str.replace(/\n|\r/g, "");
不同的操作系统使用不同的行尾符,其中包含不同的\n
和\r
的组合。这个正则表达式可以替换它们。
/\n|\r/g
可以更高效地写成 /[\n\r]/g
或者甚至是 /[\n\r]+/g
。除非绝对必要,否则应避免使用选择符(alternation)。 - PointedEarslet 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"
/\s+/g
的.replace()
方法会将整个字符串中所有的空白字符组替换为一个空格,然后使用.trim()
方法去掉文本前后多余的空格。[ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
。str = str.replace(/\s+/g, ' ').trim();
- Fred K如果您想要删除所有控制字符,包括 CR 和 LF,请使用以下代码:
myString.replace(/[^\x20-\x7E]/gmi, "")
它将删除所有不可打印字符。这些都是不在ASCII HEX空间0x20-0x7E
内的字符。如有需要,可以自由修改HEX范围。
var str = "bar\r\nbaz\nfoo";
str.replace(/[\r\n]/g, '');
>> "barbazfoo"
要去除换行符,请使用以下代码:
yourString.replace(/\r?\n?/g, '')
然后,您可以修剪字符串以去除前导和尾随空格:
然后,您可以修剪字符串以去除前导和尾随空格:
yourString.trim()
我经常使用这个正则表达式来处理json中的(html)字符串:
replace(/[\n\r\t\s]+/g, ' ')
这些字符串来自于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应用程序的文本区域和文本来说已经足够。