You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					59 lines
				
				1.7 KiB
			
		
		
			
		
	
	
					59 lines
				
				1.7 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var regexpFlags = require('./_flags');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var nativeExec = RegExp.prototype.exec;
							 | 
						||
| 
								 | 
							
								// This always refers to the native implementation, because the
							 | 
						||
| 
								 | 
							
								// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,
							 | 
						||
| 
								 | 
							
								// which loads this file before patching the method.
							 | 
						||
| 
								 | 
							
								var nativeReplace = String.prototype.replace;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var patchedExec = nativeExec;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var LAST_INDEX = 'lastIndex';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var UPDATES_LAST_INDEX_WRONG = (function () {
							 | 
						||
| 
								 | 
							
								  var re1 = /a/,
							 | 
						||
| 
								 | 
							
								      re2 = /b*/g;
							 | 
						||
| 
								 | 
							
								  nativeExec.call(re1, 'a');
							 | 
						||
| 
								 | 
							
								  nativeExec.call(re2, 'a');
							 | 
						||
| 
								 | 
							
								  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;
							 | 
						||
| 
								 | 
							
								})();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// nonparticipating capturing group, copied from es5-shim's String#split patch.
							 | 
						||
| 
								 | 
							
								var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (PATCH) {
							 | 
						||
| 
								 | 
							
								  patchedExec = function exec(str) {
							 | 
						||
| 
								 | 
							
								    var re = this;
							 | 
						||
| 
								 | 
							
								    var lastIndex, reCopy, match, i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (NPCG_INCLUDED) {
							 | 
						||
| 
								 | 
							
								      reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    match = nativeExec.call(re, str);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (UPDATES_LAST_INDEX_WRONG && match) {
							 | 
						||
| 
								 | 
							
								      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (NPCG_INCLUDED && match && match.length > 1) {
							 | 
						||
| 
								 | 
							
								      // Fix browsers whose `exec` methods don't consistently return `undefined`
							 | 
						||
| 
								 | 
							
								      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
							 | 
						||
| 
								 | 
							
								      // eslint-disable-next-line no-loop-func
							 | 
						||
| 
								 | 
							
								      nativeReplace.call(match[0], reCopy, function () {
							 | 
						||
| 
								 | 
							
								        for (i = 1; i < arguments.length - 2; i++) {
							 | 
						||
| 
								 | 
							
								          if (arguments[i] === undefined) match[i] = undefined;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return match;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = patchedExec;
							 |