2014-11-14 83 views
-1

我希望替換URL的一部分,就像正則表達式的Javascript替代不替代

"/wiki/home/de/wikihome.md".replace("/wiki/home/(..)/.*\.md ", "en"); 

爲什麼不這項工作(即返回/wiki/home/en/wikihome.md)。

它返回未修改的字符串。

如何正確地做到這一點?

+0

您是否確認要查找匹配項? – 2014-11-14 17:48:04

+0

你能檢查你的正則表達式語法是否正確?它匹配你想要匹配的東西嗎? http://regexpal.com/ – ochi 2014-11-14 17:48:46

+0

您正在將**字符串**傳遞給'.replace()',而不是[正則表達式](https://developer.mozilla.org/en-US/docs/Web/JavaScript的/指南/ Regular_Expressions)。 – 2014-11-14 17:49:59

回答

2

你必須通過regular expression,而不是一個字符串:

var result = "/wiki/home/de/wikihome.md".replace(/(\/wiki\/home)\/..\/(.*\.md)/, "$1/en/$2"); 
 
document.body.innerHTML = result;

由於.replace將取代整場比賽,你必須捕捉的部分你不不想更換,即de之前和之後的部件,並將其重新插入更換件中。

+0

只需返回「en」 – 2014-11-14 17:59:36

+0

我向你保證它不會......在那裏,我做了一個snipper。 – 2014-11-14 18:00:16

2

它返回修改後的字符串,因爲字符串不匹配。試試這個:

var str = "/wiki/home/de/wikihome.md"; 
var res = str.replace(/(\/wiki\/home\/)(..)(.*\.md)/, "$1en$3"); 
console.log(res); // => "/wiki/home/en/wikihome.md" 
+0

您刪除了搜索掩碼中的最後一個斜槓。 – 2014-11-14 18:00:56

0

我相信你的問題是你使用的是字符串而不是RegExp對象。我將字符串轉換爲RegExp,方法是將"替換爲/,然後使用\轉義必要的字符(大多數爲/)。

"/wiki/home/de/wikihome.md".replace(/\/wiki\/home\/(..)\/.*\.md/, "en"); 

見我的小提琴:http://jsfiddle.net/dd133pob/1/

對於未來的正則表達式的問題,http://regexpal.com/至少可以告訴你,如果你的正則表達式是給定的字符串匹配正確。

+0

使RegExp對象沒有幫助 – 2014-11-14 18:10:00

-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); 
+0

但是,這也會使/de/xxxx/xxx.jpg成爲/en/xxxx/xxx.jpg – 2014-11-14 18:09:19

+0

@RuedigerJungbeck這是真的。你期望這種模式顯示出來嗎? – 2014-11-14 18:11:58