43

我正在尝试选择 in 之后name=和之前的内容&

"/pages/new?name=J&return_url=/page/new"

到目前为止我有..

^name=(.*?).

在这种情况下,我试图返回J,但它是动态的,因此它可以包含多个字符、字母或数字。

最终情况将允许我自己对replace正则表达式找到的这个动态变量做一个陈述。

4

9 回答 9

81

/name=([^&]*)/

  • 删除^and 以 a 结尾&

例子:

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

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

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'];

更新

尽管在任何版本的 IE 中仍然不支持,但URLSearchParams提供了一种为其他浏览器检索值的本机方式。

于 2012-04-12T15:39:29.690 回答
11

如果参数后面有散列,则接受的答案包括散列部分。正如@bishoy 在他的功能中所拥有的那样,正确的正则表达式是

/name=([^&#]*)/
于 2015-09-01T16:42:24.267 回答
9

改进以前的答案:

/**
 *
 * @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 
于 2015-12-15T16:10:41.747 回答
4

这是完整的功能(针对大写/小写测试和修复)

function getParameterByName (name) 
{
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name.toLowerCase() + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.search.toLowerCase());
    if (results == null)
        return "";
    else
        return decodeURIComponent(results[1].replace(/\+/g, " "));
}
于 2014-09-12T05:47:40.460 回答
3

以下应该有效:

\?name=(.*?)&
于 2012-04-12T15:39:59.050 回答
2
var myname = str.match(/\?name=([^&]+)&/)[1];

[1] 是因为您显然想要组的值(括号中的正则表达式部分)。

var str = "/pages/new?name=reaojr&return_url=/page/new";
var matchobj = str.match(/\?name=([^&]+)&/)[1];
document.writeln(matchobj); // prints 'reaojr'
于 2012-04-12T15:51:15.463 回答
2

这是一个避免存储变量的单行答案(如果你不能使用 URLSearchParams 因为你仍然支持 IE)

(document.location.search.match(/[?&]name=([^&]+)/)||[null,null])[1]

通过||[null,null]在括号中添加和包围它,您可以安全地索引数组中的第 1 项,而无需检查 match 是否返回结果。当然,您可以将 [null,null] 替换为您想要的默认值。

于 2020-06-19T13:46:22.853 回答
0

这可能有效:

\??(.*=.+)*(&.*=.+)?
于 2021-05-27T14:28:46.517 回答
0

您可以在 javascript 中使用简单的.split()获得相同的结果。

让值 = url.split("name=")[1].split("&")[0];

于 2021-06-28T12:06:27.190 回答