28

我正在尝试使用以下方法在 JavaScript 中进行替换:

r = "I\nam\nhere";
s = r.replace("\n"," ");

但不是给我

我在这里

作为 的值s,它返回相同。

问题出在哪里??

4

9 回答 9

46

正如其他人所说,您的正则表达式缺少全局标志。正确的表达方式应该和其他人给你的一样。

var r = "I\nam\nhere";
var s = r.replace(/\n/g,' ');

我想指出与一开始发生的事情的不同之处。您正在使用以下语句

var r = "I\nam\nhere";
var s = r.replace("\n"," ");

这些陈述确实是正确的,并将替换字符 \n 的一个实例。它使用不同的算法。当给出一个字符串来替换它时,它将寻找第一次出现并简单地用作为第二个参数给出的字符串替换它。当使用正则表达式时,我们不只是寻找要匹配的字符,我们可以编写复杂的匹配语法,如果找到一个或多个匹配,那么它将被替换。更多关于 JavaScript 正则表达式的信息可以在这里w3schools找到。

例如,您制作的方法可以更通用,以解析来自几种不同类型文件的输入。由于操作系统的差异,在需要换行的情况下,文件带有 \n 或 \r 是很常见的。为了能够同时处理您的代码,可以使用正则表达式的某些功能重写。

var r = "I\ram\nhere";
var s = r.replace(/[\n\r]/g,' ');
于 2012-12-28T16:56:21.297 回答
13

采用s = r.replace(/\\n/g," ");

获取参考

javascript 替换代码中的“g”代表“贪婪”,这意味着如果可能,替换应该不止一次发生

于 2012-12-28T16:10:49.430 回答
13

问题是您需要使用该g标志来替换所有匹配项,因为默认情况下,replace()仅对找到的第一个匹配项起作用:

var r = "I\nam\nhere",
    s = r.replace(/\n/g,' ');

但是,要使用该g标志,您必须使用正则表达式方法。

顺便说一句,声明变量时请使用var,否则你创建的变量都是全局的,这可能会导致以后出现问题。

于 2012-12-28T16:12:16.660 回答
3

.replace()需要全局匹配标志:

s = r.replace(/\n/g, " ");
于 2012-12-28T16:13:28.610 回答
3

它对我有用:

var s = r.split('\\n').join(' ');
于 2018-11-05T11:18:40.767 回答
1

您可以使用:

var s = r.replace(/\n/g,' ').replace(/\r/g,' ');

因为不同的 SO 使用不同的方式设置“新行”,例如:Mac Unix Windows,在此之后,您可以使用其他功能来规范空白。

于 2016-07-13T16:49:58.660 回答
1

只是\\\n用来替换它会工作。

r.replace("\\\n"," ");
于 2019-05-29T10:35:51.010 回答
0

这里的解决方案对我来说非常完美:

r.replace(/=(\r\n|\n|\r)/gm," ");
于 2019-11-12T18:59:41.343 回答
0

replaceAll()相对较新,并非所有浏览器都支持:

r = "I\nam\nhere";
s = r.replaceAll("\n"," ");
于 2021-03-14T15:16:34.083 回答