0
    var keys = {};
    source.replace(
            /([^=&]+)=([^&]*)/g,
            function(full, key, value) {
                keys[key] =
                        (keys[key] ? keys[key] + "," : "") + value;
                return "";
            }
    );
    var result = [];
    for (var key in keys) {
        result.push(key + "=" + keys[key]);
    }
    return result.join("&");
    }
    alert(compress("foo=1&foo=2&blah=a&blah=b&foo=3"));

私はまだこれと混同しています /([^=&]+)=([^&]*)/g 、 + と * は ?

4

2 に答える 2

1

^ はこれらではないことを意味し、+ は 1 つ以上の文字が一致することを意味し、() はグループであることを意味します。* は任意の一致数 (0+) です。

http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

したがって、それを見ると、=&=&または&=&または==ではないものを置き換えていると推測されますが、これは奇妙です。

于 2013-08-12T02:05:05.047 に答える
0

+*量指定子と呼ばれます。これらは、サブセットに一致する回数 (通常、量指定子が適用される、[]またはグループ化される直前の文字のセット) が繰り返される回数を決定します。()

/     start of regex

 (    group 1 starts
   [^ anything that does not match
   =& equals or ampersand
   ]+ one or more of above
 )    group 1 ends

   =  followed by equals sign followed by

 (    group 2 starts
   [^ anything that does not match
   =& ampersand
   ]* zero or more of above
 )    group 2 ends

/     end of regex
于 2013-08-12T02:09:02.640 に答える