-2

重複の可能性:
JavaScript でクエリ文字列値を取得する

私はこのパターンを「持っていた」のですが、うまくいきましたが、必要なものはまったく得られませんでした。

var regex = new RegExp('\\b' + data.keyword + '(=[^&]*)?(&|$)',"gi");

しかし、次の正規表現は私が必要としているものですが、正規表現 obj 内で動作するようには見えません: /&dyanmicTxtHere(\=[^&] )?(?=&|$)|^dyanmicTxtHere(\ =[^&] )?(&|$)/

私が試した:これは機能していません -

var regex = new RegExp('&' + data.keyword + '(=[^&]*)?|^' + data.keyword + '(=[^&]*)?&?',"gi");

理由がわかりません。したがって、上記の正規表現は、渡されたパラメーター (および vlaue)(data.keyword) を取り除き、? を処理する必要があります。そして、そのパラメーターがURLにある場所ならどこでも。これ

では、これは何と一致するでしょうか?

www.someurl.com?Keyword=foo

www.someurl.com?up=down&Keyword=foo

www.somurl.com?up=down&keyword=foo&left=right

など...そのため、「キーワード」を動的パラメーターとして渡すと、それとそれに関連付けられた値が削除されます。

4

3 に答える 3

3

JavaScript を介して、リクエストからパラメーター値を読み取る必要があるように見えますが、正しいですか?

これを使用してみてください:

function getParameterByName(name)
{
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.search);
    if(results == null)
        return "";
    else
        return decodeURIComponent(results[1].replace(/\+/g, " "));
}

この質問から取得。

于 2012-08-28T18:06:19.830 に答える
1

明らかに、以下は正規表現ではありません。しかし、それはあなたの要件を満たすべきだと思います。GET クエリ文字列での名前と値のペアの要件を利用し、単純な文字列といくつかの配列操作を使用して、渡された URL からさまざまな (存在する場合) 名前と値のペアを調べます。

function removeParam(url, param) {
    // checks for the existence of a '?' in the passed url:
    var queryAt = url.indexOf('?') + 1;
    /* function exits if:
       1. no 'url' parameter was passed,
       2. no 'param' parameter was passed in, or
       3. the 'queryAt' variable is false, or has a falsey value */
    if ((!url || !param) || !queryAt) {
        return false;
    }
    else {
        /* if the 'param' passed in wasn't found in the 'url' variable,
           the function exits, returning the original url (as no modification
           is required */
        if (url.indexOf(param) == -1) {
            return url;
        }
        else {
                /* gets the substring of the url from the first
                   character *after* the '?' */
            var all = url.substring(queryAt),
                // creates an array of the name and value pairs
                nameValues = all.split('&'),
                // creating a new array
                newNameValues = [],
                parts;
            // iterates through each name-value pair
            for (var i = 0, len = nameValues.length; i < len; i++) {
                // splits the name-value pair into two parts
                parts = nameValues[i].split('=');
                /* if the first part (the 'name' of the param) does not
                   matches what you're looking for then the whole name-value
                   pair is pushed into the 'newNameValues' array */
                if (parts[0] !== param) {
                    newNameValues.push(nameValues[i]);
                }
            }
            // returns the reconstructed URL
            return url.substring(0, queryAt) + newNameValues.join('&');
        }
    }
}

JS フィドルのデモ

于 2012-08-28T18:47:46.983 に答える
1

生成された正規表現がどのように見えるかを確認する必要がある場合は、単に呼び出しますregex.toString()

試したものでそれを行うと、次のようになります。

/&dyanmicTxtHere(=[^&]*)?|^dyanmicTxtHere(=[^&]*)?&?/gi

それに基づいて、提供した正規表現のようにするために何を変更する必要があるかをかなり見ることができます。

var regex = new RegExp('&' + data.keyword + '(\\=[^&])?(?=&|$)|^' + data.keyword + '(\\=[^&])?(&|$)', '');

それを呼び出すtoStringと、次のようになります。

/&dyanmicTxtHere(\=[^&])?(?=&|$)|^dyanmicTxtHere(\=[^&])?(&|$)/

それでもうまくいかない場合は、解析しようとしていることを正確に説明してみてください。

于 2012-08-28T18:10:20.667 に答える