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; |