我正在尝试使用以下代码替换JavaScript:
r = "I\nam\nhere";
s = r.replace("\n"," ");
但不是给我
我在这里
作为s
的值,
它返回相同的内容。
问题出在哪里?
答案 0 :(得分:16)
正如其他人所说,你的正则表达式缺少贪婪的旗帜。正确的表达应该是其他人给你的东西。
var r = "I\nam\nhere";
var s = r.replace(/\n/g,' ');
我想指出与一开始的情况有何不同。 您使用以下语句
var r = "I\nam\nhere";
var s = r.replace("\n"," ");
语句确实是正确的,将替换字符\ n的一个实例。它使用不同的算法。在给出要替换的String时,它将查找第一次出现并简单地将其替换为作为第二个参数给出的字符串。当使用正则表达式时,我们不只是寻找匹配的字符,我们可以编写复杂的匹配语法,如果找到匹配或几个,那么它将被替换。有关JavaScript正则表达式的更多信息,请访问w3schools。
例如,您可以使您更方便地解析来自几种不同类型文件的输入。由于操作系统的不同,使用\ n或\ r \ n的文件很常见,其中需要新行。为了能够处理你的代码,可以使用正则表达式的一些功能来重写。
var r = "I\ram\nhere";
var s = r.replace(/[\n\r]/g,' ');
答案 1 :(得分:12)
问题是您需要使用g
标志来替换所有匹配项,因为默认情况下,replace()
仅对其找到的第一个匹配项执行操作:< / p>
var r = "I\nam\nhere",
s = r.replace(/\n/g,' ');
但是,要使用g
标志,您必须使用正则表达式方法。
顺便提一下,在声明变量时请使用var
,否则您创建的变量都是全局的,这可能会导致以后出现问题。
答案 2 :(得分:3)
答案 3 :(得分:2)
.replace()
需要全局匹配标志:
s = r.replace(/\n/g, " ");
答案 4 :(得分:0)
您可以使用:
var s = r.replace(/\n/g,' ').replace(/\r/g,' ');
因为不同的SO使用不同的方式设置“新行”,例如:Mac Unix Windows,在此之后,您可以使用其他函数来规范化空格。
答案 5 :(得分:0)
对我有用:
var s = r.split('\\n').join(' ');
答案 6 :(得分:0)
只需使用\\\n
替换它即可。
r.replace("\\\n"," ");
答案 7 :(得分:0)
解决方案from here对我来说很完美:
r.replace(/=(\r\n|\n|\r)/gm," ");
答案 8 :(得分:0)
replaceAll()
相对较新,并非所有浏览器都支持:
r = "I\nam\nhere";
s = r.replaceAll("\n"," ");