2014-11-14 4 views
-1

Я хочу, чтобы заменить часть URL, какRegEx заменить в Javascript не заменяет

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

почему не эту работу (т.е. возвращение /wiki/home/en/wikihome.md).

Он возвращает немодифицированную строку.

Как это сделать правильно?

+0

Вы подтвердили, что нашли совпадение? –

+0

Вы можете проверить правильность синтаксиса регулярных выражений? это соответствует тому, что вы хотите, чтобы он соответствовал? http://regexpal.com/ – ochi

+0

Вы передаете ** строку ** в '.replace()', а не [регулярное выражение] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Руководство/Regular_Expressions). –

ответ

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» –

+0

Уверяю вас, что нет ... там, я сделал из него съемку. –

2

Он возвращает onmodified строку, потому что строка не совпадает. Попробуйте это:

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

Вы удалили последнюю косую черту в маске поиска. –

0

Я считаю, что ваша проблема в том, что вы используете строку вместо объекта RegExp. Я перевел вашу строку в RegExp, заменив " на /, а затем выделив необходимые символы (в основном /) с \.

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

Смотрите мою скрипку: http://jsfiddle.net/dd133pob/1/

Для будущих регулярных выражений проблем, http://regexpal.com/ может по крайней мере сказать вам, если ваше регулярное выражение правильно соответствию данной строки.

+0

Создание объекта RegExp не помогает –

-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 –

+0

@RuedigerJungbeck Это правда. Вы ожидаете, что эта картина появится? –