stuppid_bot

Именнованные регулярные выражения

May 11th, 2013
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // (#<identifier> rule)
  2. function captureNames(re) {
  3.     var names = [];
  4.    
  5.     var ret = new RegExp( re.source.replace( /#<(\w{1,32})> /g, function(q, e) {
  6.         names.push(e);        
  7.         return '';
  8.     } ), (re.global ? 'g' : '') + (re.ignoreCase ? 'i' : '') + (re.multiline  ? 'm' : '') );
  9.    
  10.     ret.names = names;
  11.    
  12.     function assign(m) {
  13.         if (m == null) {
  14.             return m;
  15.         }
  16.        
  17.         var i = ret.names.length, j, o = {};
  18.        
  19.         while (i) {
  20.             j = i;
  21.             o[ ret.names[--i] ] = m[j];
  22.         }
  23.        
  24.         return o;
  25.     }
  26.    
  27.     ret.exec = function(str) {
  28.         return assign( RegExp.prototype.exec.call(this, str) );
  29.     }
  30.    
  31.     return ret;
  32. }
Advertisement
Add Comment
Please, Sign In to add comment