43

私はinname=の前後に来るものだけを選択しようとしています&

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

これまでのところ私は..

^name=(.*?).

この場合は、だけを返そうとしてJいますが、動的であるため、非常に多くの文字、文字、または数字が返される可能性があります。

replaceエンドケースの状況では、正規表現によって検出されたこの動的変数に対してステートメントを実行できるようになります。

4

9 に答える 9

81

/name=([^&]*)/

  • を削除し、^で終了します&

例:

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 に答える
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 に答える
0

これはうまくいくかもしれません:

\??(.*=.+)*(&.*=.+)?
于 2021-05-27T14:28:46.517 に答える