使用正则表达式从查询字符串中捕获值?

Tri*_*rip 30 javascript regex query-string

我试图选择name=之前和之后的内容&:

"/pages/new?name=J&return_url=/page/new"
Run Code Online (Sandbox Code Playgroud)

到目前为止我有..

^name=(.*?).
Run Code Online (Sandbox Code Playgroud)

我试图在这种情况下返回,只是J,但它的动态,所以它可以有几个字符,字母或数字.

最终案例的情况是允许自己对replace正则表达式找到的这个动态变量做一个声明.

vol*_*ron 60

/name=([^&]*)/

  • 删除^和结束&

例:

var str     = "/pages/new?name=J&return_url=/page/new";
var matches = str.match(/name=([^&]*)/);
alert(matches[1]);
Run Code Online (Sandbox Code Playgroud)

更好的方法是打破所有参数(使用当前地址的示例):

function getParams (str) {
   var queryString = str || window.location.search || '';
   var keyValPairs = [];
   var params      = {};
   queryString     = queryString.replace(/.*?\?/,"");

   if (queryString.length)
   {
      keyValPairs = queryString.split('&');
      for (pairNum in keyValPairs)
      {
         var key = keyValPairs[pairNum].split('=')[0];
         if (!key.length) continue;
         if (typeof params[key] === 'undefined')
         params[key] = [];
         params[key].push(keyValPairs[pairNum].split('=')[1]);
      }
   }
   return params;
}


var url    = "/pages/new?name=L&return_url=/page/new";
var params = getParams(url);
params['name'];
Run Code Online (Sandbox Code Playgroud)

更新

虽然在任何版本的IE中仍然不支持,但URLSearchParams提供了一种检索其他浏览器值的本机方法.


小智 7

改进以前的答案:

/**
 *
 * @param {string} name
 * @returns {string|null}
 */
function getQueryParam(name) {
  var q = window.location.search.match(new RegExp('[?&]' + name + '=([^&#]*)'));
  return q && q[1];
}

getQueryParam('a'); // returns '1' on page http://domain.com/page.html?a=1&b=2 
Run Code Online (Sandbox Code Playgroud)


Wil*_*ely 5

如果在params之后有一个哈希,则接受的答案包括哈希部分.正如@bishoy的功能,正确的正则表达式将是

/name=([^&#]*)/
Run Code Online (Sandbox Code Playgroud)