1

次の形式の製品 ID を含む URL があります。

1 つのアルファベット文字の後に任意の桁数、アンダースコア、任意の桁数とアンダースコアが続きます。

したがって、これは有効な製品 id:c23_02398105 であり、これも有効です: c23_02398105_9238714

もちろん、URL では他のクエリ文字列項目に挟まれているので、この URL では id だけを抽出したい:

http://www.mydomain.com/product.php?action=edit&id=c23_02398105&side=1

私はこれに沿って正規表現を試してきましたが、役に立ちませんでした:

/&id=[a-z]_[(0-9)*]&/

製品IDを抽出する正しい方法は何ですか?

4

4 に答える 4

1

以下は各キーの値の配列を返すため、以下の文字列を取得する場合は、値を区切り文字 ( などparams.id.join(',')) で結合して、コンマで区切られた ID の文字列を取得します。

フィドルを見る


http://someurl.com?key=value&keynovalue&keyemptyvalue=&&keynovalue=nowhasvalue#somehash

ハンドル:

  • 通常のキーと値のペア ( ?param=value)
  • 値のないキー ( ?param: 等号または値なし)
  • 空の値を持つキー ( ?param=: 等号、ただし等号の右側に値がない)
  • 繰り返しキー ( ?param=1&param=2)
  • 空のキーを削除します ( ?&&: キーまたは値なし)

コード:

  • function URLParameters(_querystring){
        var queryString = _querystring || window.location.search || '';
        var keyValPairs = [];
        var params      = {};
    
        queryString = queryString.replace(/^[^?]*\?/,''); // only get search path
    
        if (queryString.length)
        {
           keyValPairs = queryString.split('&');
           for (pairNum in keyValPairs)
           {
              if (! (!isNaN(parseFloat(pairNum)) && isFinite(pairNum)) ) continue;
              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 params = URLParameters(<url>); // if url is left blank uses the current page URL
    params.key;                    // returns an array of values (1..n) for the key (called 'key' here)
    

上記の URL を使用した特定のキー ('key','keyemptyvalue','keynovalue') の出力例:

  • key            ["value"]
    keyemptyvalue  [""]
    keynovalue     [undefined, "nowhasvalue"]
    
于 2013-02-02T15:25:43.157 に答える
1
function qry(sr) {
  var qa = [];
  for (var prs of sr.split('&')) {
    var pra = prs.split('=');
    qa[pra[0]] = pra[1];
  }
  return qa;
}

var z = qry('http://example.com/product.php?action=edit&id=c23_02398105&side=1');
z.id; // c23_02398105

ソース

于 2013-02-02T15:21:08.657 に答える
1

次のように、正規表現の代わりに JavaScript 文字列関数を使用できます。

var url = "http://www.example.com/product.php?action=edit&id=c23_02398105&side=1";
var idToEnd = url.substring(url.search("&id")+4, url.length);
var idPure = idToEnd.substring(0, idToEnd.search("&"));
alert(idPure);

出力はc23_02398105

于 2013-02-02T15:45:11.653 に答える
0

次の表現はあなたの説明に適合します

/&id=([a-z]\d*_[\d_]*)/

文字が小文字であり、指定された形式の id が URL に 1 つしかないか、必要な ID が最初の ID であると想定します。

var url =
   'http://www.mydomain.com/product.php?action=edit&id=c23_02398105&side=1';

var m = url.match( /&id=([a-z]\d*_[\d_]*)/ );

console.log( m && m[1] );    // 'c23_02398105'
于 2013-02-02T19:25:55.353 に答える