我收到了以下代码
replaceforever: function(string,find,replace){
while(_.contains(string,find)){
string.replace(find,replace);
}
return string;}
我正在发送类似'./routes\admin\articles.js','\\','/'
的内容
但它似乎总是进入while循环一次并用一个'/'更改它们:|
而不是一个很好的./routes/admin/articles.js
任何人都可以向我解释一下我做错了什么?
答案 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);
}