如何在JavaScript中用空格替换换行符/换行符?

92

我有一个变量,其中包含大量单词(数百万个),格式如下:

var words =  "
car
house
home
computer
go 
went
";
我想制作一个函数,用空格替换每个单词之间的换行符。
所以结果看起来会像这样:
car house home computer go went
6个回答

172
您可以使用.replace()函数:
words = words.replace(/\n/g, " ");

请注意,您需要在正则表达式上使用g标志,以便将所有换行符替换为空格,而不仅仅是第一个。

另外,请注意,您必须将 .replace() 的结果赋值给变量,因为它返回一个新字符串。 它不会修改现有的字符串。 Javascript 中的字符串是不可变的(它们不能直接被修改),因此对字符串进行任何修改操作,如.slice().concat().replace()等,都会返回一个新字符串。

let words = "a\nb\nc\nd\ne";
console.log("Before:");
console.log(words);
words = words.replace(/\n/g, " ");

console.log("After:");
console.log(words);


16
为什么会被踩?没有给出解释的踩贴者不利于我们改进答案(从而造福整个社区)。 - jfriend00

91

如果有多个换行符(换行符号),并且可能同时出现\r\n,而你需要将所有连续的换行符替换为一个空格,请使用:

var new_words = words.replace(/[\r\n]+/g," ");

查看正则表达式演示

要匹配所有Unicode换行符并替换/删除它们,请将 \x0B\x0C\u0085\u2028\u2029 添加到上面的正则表达式中:

/[\r\n\x0B\x0C\u0085\u2028\u2029]+/g
/[\r\n\x0B\x0C\u0085\u2028\u2029]+/g表示匹配任何单个字符,包括回车符(CR)、换行符(LF)、行分隔符(LS)、段落分隔符(PS)、下一个行(NEL)、制表符和分页符。

var words = "car\r\n\r\nhouse\nhome\rcomputer\ngo\n\nwent";
document.body.innerHTML = "<pre>OLD:\n" + words + "</pre>";
var new_words = words.replace(/[\r\n\x0B\x0C\u0085\u2028\u2029]+/g," ");
document.body.innerHTML += "<pre>NEW:\n" + new_words + "</pre>";


7

代码:(已修复)

var new_words = words.replace(/\n/g," ");

你真的尝试过这个吗?对我来说似乎不起作用:http://jsfiddle.net/jfriend00/Zn4WE/1/ - jfriend00
@jfriend00 @Madmartigan 确实。有时候,显而易见的被忽略了...(如果没有 /g 标志,只会替换第一次出现的) - Dr.Kameleon

2
无需使用全局正则表达式,应该使用 replaceAll 代替 replace
myString.replaceAll('\n', ' ')

点赞了,您能解释一下为什么其他解决方案需要大量空间,而您的解决方案只使用必要的空间吗? - Michael

2

一些简单的解决方案可能如下:

words.replace(/(\n)/g," ");

你真的试过这个吗?对我来说似乎没有起作用:http://jsfiddle.net/jfriend00/Zn4WE/1 - jfriend00
2
为什么在/(\n)/中需要括号?它们是不必要的。 - jfriend00
它们确实是冗余的,但我更喜欢保留它们以使语句更清晰。 - Bogdan Emil Mariesan

0

const words = `He had 
concluded that pigs 
must be able 
to fly in Hog Heaven.
`
document.body.innerHTML = "<pre>without-Trim-And-Remove:\n" + words + "</pre>";

trimAndRemoveSymbols=(text)=>{
        return text.replace(/[\n]+/g, '').trim();
    }
document.body.innerHTML += "<pre>Trim-And-Remove:\n" + trimAndRemoveSymbols(words) + "</pre>";


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接