Как мне сделать это совпадение с RegEx, если нет '?' в строке запроса? - PullRequest
1 голос
/ 27 августа 2010

У меня есть следующий RegEx для замены всей строки запроса на строку:

"http://www.google.com?bar=1".replace(/\?.*/, "?foo=2")

Это работает, только если есть строка запроса. Следующее не будет работать:

"http://www.google.com".replace(/\?.*/, "?foo=2")

Как сделать так, чтобы RegEx соответствовал обеим ситуациям?

Ответы [ 5 ]

3 голосов
/ 27 августа 2010

Избегайте взлома строк / регулярных выражений для манипулирования URL-адресами в JS.В каждый браузер встроен очень хороший анализатор URL, и вы можете получить к нему доступ из любого элемента ссылки:

var a= document.createElement('a');
a.href= 'http://www.google.com/?bar=1';
a.search= '?foo=2';
alert(a.href); // http://www.google.com/?foo=2
3 голосов
/ 27 августа 2010

Скажите или конец строки :

|$

replace(/\?.*|$/, "?foo=2")
2 голосов
/ 27 августа 2010

Бесполезно для регулярных выражений для меня.Проверьте, есть ли ? - если нет, добавьте строку запроса, в противном случае сначала удалите старую строку запроса.ПОЦЕЛУЙ.

1 голос
/ 27 августа 2010

Захватите хост и замените все остальное желаемой строкой запроса.

url.replace(/([^?]+).*/, "$1?querystring");
0 голосов
/ 27 августа 2010

Это должно сработать, но я не совсем уверен, что именно вы пытаетесь сделать, я не могу вспомнить синтаксис regex в javascript, поэтому замещающая строка в синтаксисе python, но она должна дать вам идею ... Вы совпадает с выделенным "?" когда вы делаете "\?" так что это не будет соответствовать второй, так как нет "?" в строке.

/(.*?google.com)(.*?)/  

replacestring = '\\1'+'?foo=2'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...