0

我得到了以下代码

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

4 回答 4

1

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

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

replaceforever('./routes\\admin\\articles.js','\\','/');

'./routes\admin\articles.js',另一方面,评估为'./routesadminarticles.js'

于 2013-07-07T19:56:30.867 回答
0

如果我做对了,这将进行全局替换:

stringVariable.replace(/\\/g, '/');
于 2013-07-07T19:53:36.790 回答
0

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

这一行:

string.replace(find,replace);

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

string = string.replace(find,replace);

但是我不确定这种方法是否真的是一个好主意。JavaScript 已经使用正则表达式提供了“全部替换”功能:

result = input.replace(/\\/g, '/');
于 2013-07-07T19:54:24.957 回答
-2

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

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

所以你需要类似的东西:

replaceforever: function (string,find,replace) {  
    return string.replace(find,replace);  
}
于 2013-07-07T19:54:52.820 回答