我希望替换URL的一部分,就像正则表达式的Javascript替代不替代
"/wiki/home/de/wikihome.md".replace("/wiki/home/(..)/.*\.md ", "en");
为什么不这项工作(即返回/wiki/home/en/wikihome.md)。
它返回未修改的字符串。
如何正确地做到这一点?
我希望替换URL的一部分,就像正则表达式的Javascript替代不替代
"/wiki/home/de/wikihome.md".replace("/wiki/home/(..)/.*\.md ", "en");
为什么不这项工作(即返回/wiki/home/en/wikihome.md)。
它返回未修改的字符串。
如何正确地做到这一点?
你必须通过regular expression,而不是一个字符串:
var result = "/wiki/home/de/wikihome.md".replace(/(\/wiki\/home)\/..\/(.*\.md)/, "$1/en/$2");
document.body.innerHTML = result;
由于.replace
将取代整场比赛,你必须捕捉的部分你不不想更换,即de
之前和之后的部件,并将其重新插入更换件中。
只需返回“en” – 2014-11-14 17:59:36
我向你保证它不会......在那里,我做了一个snipper。 – 2014-11-14 18:00:16
它返回修改后的字符串,因为字符串不匹配。试试这个:
var str = "/wiki/home/de/wikihome.md";
var res = str.replace(/(\/wiki\/home\/)(..)(.*\.md)/, "$1en$3");
console.log(res); // => "/wiki/home/en/wikihome.md"
您删除了搜索掩码中的最后一个斜杠。 – 2014-11-14 18:00:56
我相信你的问题是你使用的是字符串而不是RegExp对象。我将字符串转换为RegExp,方法是将"
替换为/
,然后使用\
转义必要的字符(大多数为/
)。
"/wiki/home/de/wikihome.md".replace(/\/wiki\/home\/(..)\/.*\.md/, "en");
见我的小提琴:http://jsfiddle.net/dd133pob/1/
对于未来的正则表达式的问题,http://regexpal.com/至少可以告诉你,如果你的正则表达式是给定的字符串匹配正确。
使RegExp对象没有帮助 – 2014-11-14 18:10:00
您可以使用组进行替换,但有一种更简单的方法。只需更换你想要的部分。
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);
但是,这也会使/de/xxxx/xxx.jpg成为/en/xxxx/xxx.jpg – 2014-11-14 18:09:19
@RuedigerJungbeck这是真的。你期望这种模式显示出来吗? – 2014-11-14 18:11:58
您是否确认要查找匹配项? – 2014-11-14 17:48:04
你能检查你的正则表达式语法是否正确?它匹配你想要匹配的东西吗? http://regexpal.com/ – ochi 2014-11-14 17:48:46
您正在将**字符串**传递给'.replace()',而不是[正则表达式](https://developer.mozilla.org/en-US/docs/Web/JavaScript的/指南/ Regular_Expressions)。 – 2014-11-14 17:49:59