正则表达式,用于查找和替换URL中的特定值

时间:2013-11-20 05:24:52

标签: javascript jquery regex expression

我正在尝试从URL中提取?ref值,并希望将其替换为其他值。

示例假设我的网址类似于此http://myexample.com/?ref=test?nref=xml&page=1,或者可以是http://myexample.com/?fref=like?ref=test?nref=xml&page=1

从上面的url我想找到?ref值,并希望将其替换为另一个字符串说“testing”。任何帮助,也想学习提前正则表达任何帮助。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您发布的示例的解决方案。

str = str.replace(/\b(ref=)[^&?]*/i, '$1testing');

正则表达式:

\b             the boundary between a word char (\w) and and not a word char
 (             group and capture to \1:
  ref=         'ref='
 )             end of \1
[^&?]*         any character except: '&', '?' (0 or more times)

i修饰符用于不区分大小写的匹配。

请参阅working demo

答案 1 :(得分:0)

确保你没有两个“?”在网址中。我猜你的意思 http://myexample.com?ref=test&nref=xml&page=1

您可以使用以下功能

这里url是你的url,name是键,在你的情况下是“ref”,new_value是新值,即替换“test”的值

该函数将返回新的URL

function replaceURLParam (url, name, new_value) {

  // ? or &, name=, anything that is not &, zero or more times          
  var str_exp = "[\?&]" + name + "=[^&]{0,}";

  var reExp = new RegExp (str_exp, "");

  if (reExp.exec (url) == null) {  // parameter not found
      var q_or_a = (url.indexOf ("?") == -1) ? "?" : "&";  // ? or &, if url has ?, use &
      return url + q_or_a + name + "=" + new_value;
  }

  var found_string = reExp.exec (url) [0];

  // found_string.substring (0, 1) is ? or &
  return url.replace (reExp, found_string.substring (0, 1) + name + "=" + new_value);
}

答案 2 :(得分:0)

试试这个:

var name = 'ref', 
    value = 'testing',
    url;

url = location.href.replace(
    new RegExp('(\\?|&)(' + name + '=)[^&]*'), 
    '$1$2' + value
);

new RegExp('(\\?|&)(' + name + '=)[^&]*')提供/(\?|&)(ref=)[^&]*/,表示:

"?" or "&" then "ref=" then "everything but '&' zero or more times".

最后,$1保留(\?|&)的结果,而$2保留(ref=)的结果。

链接阅读:replaceregexp