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.
		
		
		
		
		
			
		
			
				
					
					
						
							31 lines
						
					
					
						
							1.0 KiB
						
					
					
				
			
		
		
	
	
							31 lines
						
					
					
						
							1.0 KiB
						
					
					
				| 'use strict';
 | |
| // https://tc39.github.io/String.prototype.matchAll/
 | |
| var $export = require('./_export');
 | |
| var defined = require('./_defined');
 | |
| var toLength = require('./_to-length');
 | |
| var isRegExp = require('./_is-regexp');
 | |
| var getFlags = require('./_flags');
 | |
| var RegExpProto = RegExp.prototype;
 | |
| 
 | |
| var $RegExpStringIterator = function (regexp, string) {
 | |
|   this._r = regexp;
 | |
|   this._s = string;
 | |
| };
 | |
| 
 | |
| require('./_iter-create')($RegExpStringIterator, 'RegExp String', function next() {
 | |
|   var match = this._r.exec(this._s);
 | |
|   return { value: match, done: match === null };
 | |
| });
 | |
| 
 | |
| $export($export.P, 'String', {
 | |
|   matchAll: function matchAll(regexp) {
 | |
|     defined(this);
 | |
|     if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');
 | |
|     var S = String(this);
 | |
|     var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);
 | |
|     var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);
 | |
|     rx.lastIndex = toLength(regexp.lastIndex);
 | |
|     return new $RegExpStringIterator(rx, S);
 | |
|   }
 | |
| });
 |