我如何替换\字符?

时间:2013-07-07 19:44:31

标签: javascript replace while-loop

我收到了以下代码

replaceforever: function(string,find,replace){
while(_.contains(string,find)){
  string.replace(find,replace);
}
return string;}

我正在发送类似'./routes\admin\articles.js','\\','/'的内容 但它似乎总是进入while循环一次并用一个'/'更改它们:| 而不是一个很好的./routes/admin/articles.js

任何人都可以向我解释一下我做错了什么?

4 个答案:

答案 0 :(得分:1)

问题在于您的测试,而不是代码(假设您使用的是underscore.js; 使用正则表达式会更明智。)

您需要在输入字符串中转义反斜杠:

replaceforever('./routes\\admin\\articles.js','\\','/');
另一方面,

'./routes\admin\articles.js'评估为'./routesadminarticles.js'

答案 1 :(得分:0)

如果我做对了,这将做全球替代:

stringVariable.replace(/\\/g, '/');

答案 2 :(得分:0)

我认为问题实际上是你的while循环没有输入所有,而不是输入一次。请注意,您的输入实际上已经有/,我认为这就是您所看到的。

这一行:

string.replace(find,replace);

使用指定的替换创建一个新字符串。 。 。然后扔掉它。因此,如果你的while循环甚至被输入一次,它实际上将是一个无限循环,因为循环体实际上并没有做任何事情。相反,您需要将结果存储在变量string

string = string.replace(find,replace);

但我不确定这种方法究竟是个好主意。 JavaScript已经使用正则表达式提供“替换所有”功能:

result = input.replace(/\\/g, '/');

答案 3 :(得分:-2)

首先:string.replace()将替换所有匹配,因此不需要迭代:)

第二:string.replace()将返回一个新字符串,它不会更改使用的对象。

所以你需要这样的东西:

replaceforever: function (string,find,replace) {  
    return string.replace(find,replace);  
}