在Javascript中的RegEx替换不替换

时间:2014-11-14 17:46:15

标签: javascript

我想替换像

这样的网址部分
"/wiki/home/de/wikihome.md".replace("/wiki/home/(..)/.*\.md ", "en");

为什么这不起作用(即返回/wiki/home/en/wikihome.md)。

返回未修改的字符串。

如何正确地做到这一点?

4 个答案:

答案 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);