我想替换像
这样的网址部分"/wiki/home/de/wikihome.md".replace("/wiki/home/(..)/.*\.md ", "en");
为什么这不起作用(即返回/wiki/home/en/wikihome.md)。
返回未修改的字符串。
如何正确地做到这一点?
答案 0 :(得分:2)
它返回onmodified string,因为string不匹配。试试这个:
var str = "/wiki/home/de/wikihome.md";
var res = str.replace(/(\/wiki\/home\/)(..)(.*\.md)/, "$1en$3");
console.log(res); // => "/wiki/home/en/wikihome.md"
答案 1 :(得分:2)
您必须传递regular expression,而不是字符串:
var result = "/wiki/home/de/wikihome.md".replace(/(\/wiki\/home)\/..\/(.*\.md)/, "$1/en/$2");
document.body.innerHTML = result;
由于.replace
将替换整个匹配,因此您必须捕获不想替换的部分,即de
之前和之后的部分,然后将其插回到替换中。< / p>
答案 2 :(得分:0)
我相信你的问题是你使用的是字符串而不是RegExp对象。我将您的字符串翻译为RegExp,将"
替换为/
,然后使用/
转义必要的字符(主要是\
)。
"/wiki/home/de/wikihome.md".replace(/\/wiki\/home\/(..)\/.*\.md/, "en");
看我的小提琴:http://jsfiddle.net/dd133pob/1/
对于将来的正则表达式问题,http://regexpal.com/至少可以告诉您正则表达式是否正确匹配给定的字符串。
答案 3 :(得分:-1)
您可以使用群组进行替换,但有一种更简单的方法。只需更换你想要的部件。
var out = "/wiki/home/de/wikihome.md".replace(/(\/wiki\/home\/)[\S]+(\/.*\.md)/, "$1en$2");
console.log(out);
//easier
out = "/wiki/home/de/wikihome.md".replace(/\/de\//, '/en/');
console.log(out);
对于确定正确扩展名的情况。
out = "/wiki/home/de/wikihome.md".replace(/\/de\/([\S]*[.]md)/, '/en/$1');
console.log(out);