2016-08-26 2 views
0

У меня есть следующее регулярное выражение, чтобы получить первую часть после URL:Получить все, кроме матча в JavaScript регулярного выражения

^http[s]?:\/\/.*?\/([a-zA-Z-_.%]+).*$ 

Это соответствует тест в нижеприведенных ссылок:

Foo. ком
http://foo.com
http://foo.com/тест
http://foo.com/тест/
http://foo.com/тест? Бар

То, что я сейчас пытаюсь сделать, это воссоздать тот же URL, но заменить тест с другим значением. Либо, взяв детали до и после матча, либо изменив результат.

Я уверен, что есть способ regexy сделать это, но я не могу узнать, как это сделать.

+0

Что ты сказал, звучит хорошо, положить захвата группы вокруг него, как, таким образом, '^ (HTTP [с]:? \/\ /.* \ /). [A-Za-Z -_% ] + (. *) $ ', заменить на' $ 1newtest $ 2' – sln

ответ

2

Вы можете использовать группу захвата для части перед тем /test и использовать его в качестве обратной ссылки на замену:

var re = /^(https?:\/\/[^\/]+\/)[^?\/]+/gmi; 
var subst = '$1foobar'; 

var result = str.replace(re, subst); 

[^?\/]+ будет соответствовать текст до следующего / или ? после доменного имени в URL. Как исходное регулярное выражение, оно также предполагает, что URL-адреса начинаются с http:// или https://.

RegEx Demo

Смежные вопросы