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.
30 lines
1.0 KiB
30 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); |
|
} |
|
});
|
|
|