我希望替換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