2013-08-12 3 views
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")); 

я до сих пор путают с этим/([^ = &] +) = ([^ &] *)/г, + и * использовать для?понимание это регулярные выражения

ответ

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 
+0

Я просто не понимаю, почему match foo = 1, он не получил & –

+0

Символ '^' означает NOT. Итак, '[^ = &]' означает NOT = и NOT &. Следовательно, 'foo = 1' соответствует. Символ '=' в среднем совпадает из '=' в середине регулярного выражения, как показано в моем ответе. –

+0

aw, я получил его, в группе 1, он не соответствует началу строки с = и & –

1

Значок^означает НЕ эти, символ + означает один или несколько совпадающих символов,() - группы. И * - любое количество матчей (0+).

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

Так что, глядя на него, я guesing его заменяющий что-нибудь тот НЕ = & = & или & = & или ==, что странно.