Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9343771
es.string.match-all.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Subscribers
None
es.string.match-all.js
View Options
'use strict'
;
/* eslint-disable es/no-string-prototype-matchall -- safe */
var
$
=
require
(
'../internals/export'
);
var
global
=
require
(
'../internals/global'
);
var
call
=
require
(
'../internals/function-call'
);
var
uncurryThis
=
require
(
'../internals/function-uncurry-this'
);
var
createIteratorConstructor
=
require
(
'../internals/create-iterator-constructor'
);
var
requireObjectCoercible
=
require
(
'../internals/require-object-coercible'
);
var
toLength
=
require
(
'../internals/to-length'
);
var
toString
=
require
(
'../internals/to-string'
);
var
anObject
=
require
(
'../internals/an-object'
);
var
classof
=
require
(
'../internals/classof-raw'
);
var
isPrototypeOf
=
require
(
'../internals/object-is-prototype-of'
);
var
isRegExp
=
require
(
'../internals/is-regexp'
);
var
regExpFlags
=
require
(
'../internals/regexp-flags'
);
var
getMethod
=
require
(
'../internals/get-method'
);
var
redefine
=
require
(
'../internals/redefine'
);
var
fails
=
require
(
'../internals/fails'
);
var
wellKnownSymbol
=
require
(
'../internals/well-known-symbol'
);
var
speciesConstructor
=
require
(
'../internals/species-constructor'
);
var
advanceStringIndex
=
require
(
'../internals/advance-string-index'
);
var
regExpExec
=
require
(
'../internals/regexp-exec-abstract'
);
var
InternalStateModule
=
require
(
'../internals/internal-state'
);
var
IS_PURE
=
require
(
'../internals/is-pure'
);
var
MATCH_ALL
=
wellKnownSymbol
(
'matchAll'
);
var
REGEXP_STRING
=
'RegExp String'
;
var
REGEXP_STRING_ITERATOR
=
REGEXP_STRING
+
' Iterator'
;
var
setInternalState
=
InternalStateModule
.
set
;
var
getInternalState
=
InternalStateModule
.
getterFor
(
REGEXP_STRING_ITERATOR
);
var
RegExpPrototype
=
RegExp
.
prototype
;
var
TypeError
=
global
.
TypeError
;
var
getFlags
=
uncurryThis
(
regExpFlags
);
var
stringIndexOf
=
uncurryThis
(
''
.
indexOf
);
var
un$MatchAll
=
uncurryThis
(
''
.
matchAll
);
var
WORKS_WITH_NON_GLOBAL_REGEX
=
!!
un$MatchAll
&&
!
fails
(
function
()
{
un$MatchAll
(
'a'
,
/./
);
});
var
$RegExpStringIterator
=
createIteratorConstructor
(
function
RegExpStringIterator
(
regexp
,
string
,
$global
,
fullUnicode
)
{
setInternalState
(
this
,
{
type
:
REGEXP_STRING_ITERATOR
,
regexp
:
regexp
,
string
:
string
,
global
:
$global
,
unicode
:
fullUnicode
,
done
:
false
});
},
REGEXP_STRING
,
function
next
()
{
var
state
=
getInternalState
(
this
);
if
(
state
.
done
)
return
{
value
:
undefined
,
done
:
true
};
var
R
=
state
.
regexp
;
var
S
=
state
.
string
;
var
match
=
regExpExec
(
R
,
S
);
if
(
match
===
null
)
return
{
value
:
undefined
,
done
:
state
.
done
=
true
};
if
(
state
.
global
)
{
if
(
toString
(
match
[
0
])
===
''
)
R
.
lastIndex
=
advanceStringIndex
(
S
,
toLength
(
R
.
lastIndex
),
state
.
unicode
);
return
{
value
:
match
,
done
:
false
};
}
state
.
done
=
true
;
return
{
value
:
match
,
done
:
false
};
});
var
$matchAll
=
function
(
string
)
{
var
R
=
anObject
(
this
);
var
S
=
toString
(
string
);
var
C
,
flagsValue
,
flags
,
matcher
,
$global
,
fullUnicode
;
C
=
speciesConstructor
(
R
,
RegExp
);
flagsValue
=
R
.
flags
;
if
(
flagsValue
===
undefined
&&
isPrototypeOf
(
RegExpPrototype
,
R
)
&&
!
(
'flags'
in
RegExpPrototype
))
{
flagsValue
=
getFlags
(
R
);
}
flags
=
flagsValue
===
undefined
?
''
:
toString
(
flagsValue
);
matcher
=
new
C
(
C
===
RegExp
?
R
.
source
:
R
,
flags
);
$global
=
!!~
stringIndexOf
(
flags
,
'g'
);
fullUnicode
=
!!~
stringIndexOf
(
flags
,
'u'
);
matcher
.
lastIndex
=
toLength
(
R
.
lastIndex
);
return
new
$RegExpStringIterator
(
matcher
,
S
,
$global
,
fullUnicode
);
};
// `String.prototype.matchAll` method
// https://tc39.es/ecma262/#sec-string.prototype.matchall
$
({
target
:
'String'
,
proto
:
true
,
forced
:
WORKS_WITH_NON_GLOBAL_REGEX
},
{
matchAll
:
function
matchAll
(
regexp
)
{
var
O
=
requireObjectCoercible
(
this
);
var
flags
,
S
,
matcher
,
rx
;
if
(
regexp
!=
null
)
{
if
(
isRegExp
(
regexp
))
{
flags
=
toString
(
requireObjectCoercible
(
'flags'
in
RegExpPrototype
?
regexp
.
flags
:
getFlags
(
regexp
)
));
if
(
!~
stringIndexOf
(
flags
,
'g'
))
throw
TypeError
(
'`.matchAll` does not allow non-global regexes'
);
}
if
(
WORKS_WITH_NON_GLOBAL_REGEX
)
return
un$MatchAll
(
O
,
regexp
);
matcher
=
getMethod
(
regexp
,
MATCH_ALL
);
if
(
matcher
===
undefined
&&
IS_PURE
&&
classof
(
regexp
)
==
'RegExp'
)
matcher
=
$matchAll
;
if
(
matcher
)
return
call
(
matcher
,
regexp
,
O
);
}
else
if
(
WORKS_WITH_NON_GLOBAL_REGEX
)
return
un$MatchAll
(
O
,
regexp
);
S
=
toString
(
O
);
rx
=
new
RegExp
(
regexp
,
'g'
);
return
IS_PURE
?
call
(
$matchAll
,
rx
,
S
)
:
rx
[
MATCH_ALL
](
S
);
}
});
IS_PURE
||
MATCH_ALL
in
RegExpPrototype
||
redefine
(
RegExpPrototype
,
MATCH_ALL
,
$matchAll
);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Jul 4, 1:50 PM (4 d, 11 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3422301
Attached To
rDWAPPS Web applications
Event Timeline
Log In to Comment