Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9347344
regexp-exec.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Subscribers
None
regexp-exec.js
View Options
'use strict'
;
/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */
/* eslint-disable regexp/no-useless-quantifier -- testing */
var
call
=
require
(
'../internals/function-call'
);
var
uncurryThis
=
require
(
'../internals/function-uncurry-this'
);
var
toString
=
require
(
'../internals/to-string'
);
var
regexpFlags
=
require
(
'../internals/regexp-flags'
);
var
stickyHelpers
=
require
(
'../internals/regexp-sticky-helpers'
);
var
shared
=
require
(
'../internals/shared'
);
var
create
=
require
(
'../internals/object-create'
);
var
getInternalState
=
require
(
'../internals/internal-state'
).
get
;
var
UNSUPPORTED_DOT_ALL
=
require
(
'../internals/regexp-unsupported-dot-all'
);
var
UNSUPPORTED_NCG
=
require
(
'../internals/regexp-unsupported-ncg'
);
var
nativeReplace
=
shared
(
'native-string-replace'
,
String
.
prototype
.
replace
);
var
nativeExec
=
RegExp
.
prototype
.
exec
;
var
patchedExec
=
nativeExec
;
var
charAt
=
uncurryThis
(
''
.
charAt
);
var
indexOf
=
uncurryThis
(
''
.
indexOf
);
var
replace
=
uncurryThis
(
''
.
replace
);
var
stringSlice
=
uncurryThis
(
''
.
slice
);
var
UPDATES_LAST_INDEX_WRONG
=
(
function
()
{
var
re1
=
/a/
;
var
re2
=
/b*/g
;
call
(
nativeExec
,
re1
,
'a'
);
call
(
nativeExec
,
re2
,
'a'
);
return
re1
.
lastIndex
!==
0
||
re2
.
lastIndex
!==
0
;
})();
var
UNSUPPORTED_Y
=
stickyHelpers
.
BROKEN_CARET
;
// 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
||
UNSUPPORTED_Y
||
UNSUPPORTED_DOT_ALL
||
UNSUPPORTED_NCG
;
if
(
PATCH
)
{
patchedExec
=
function
exec
(
string
)
{
var
re
=
this
;
var
state
=
getInternalState
(
re
);
var
str
=
toString
(
string
);
var
raw
=
state
.
raw
;
var
result
,
reCopy
,
lastIndex
,
match
,
i
,
object
,
group
;
if
(
raw
)
{
raw
.
lastIndex
=
re
.
lastIndex
;
result
=
call
(
patchedExec
,
raw
,
str
);
re
.
lastIndex
=
raw
.
lastIndex
;
return
result
;
}
var
groups
=
state
.
groups
;
var
sticky
=
UNSUPPORTED_Y
&&
re
.
sticky
;
var
flags
=
call
(
regexpFlags
,
re
);
var
source
=
re
.
source
;
var
charsAdded
=
0
;
var
strCopy
=
str
;
if
(
sticky
)
{
flags
=
replace
(
flags
,
'y'
,
''
);
if
(
indexOf
(
flags
,
'g'
)
===
-
1
)
{
flags
+=
'g'
;
}
strCopy
=
stringSlice
(
str
,
re
.
lastIndex
);
// Support anchored sticky behavior.
if
(
re
.
lastIndex
>
0
&&
(
!
re
.
multiline
||
re
.
multiline
&&
charAt
(
str
,
re
.
lastIndex
-
1
)
!==
'\n'
))
{
source
=
'(?: '
+
source
+
')'
;
strCopy
=
' '
+
strCopy
;
charsAdded
++
;
}
// ^(? + rx + ) is needed, in combination with some str slicing, to
// simulate the 'y' flag.
reCopy
=
new
RegExp
(
'^(?:'
+
source
+
')'
,
flags
);
}
if
(
NPCG_INCLUDED
)
{
reCopy
=
new
RegExp
(
'^'
+
source
+
'$(?!\\s)'
,
flags
);
}
if
(
UPDATES_LAST_INDEX_WRONG
)
lastIndex
=
re
.
lastIndex
;
match
=
call
(
nativeExec
,
sticky
?
reCopy
:
re
,
strCopy
);
if
(
sticky
)
{
if
(
match
)
{
match
.
input
=
stringSlice
(
match
.
input
,
charsAdded
);
match
[
0
]
=
stringSlice
(
match
[
0
],
charsAdded
);
match
.
index
=
re
.
lastIndex
;
re
.
lastIndex
+=
match
[
0
].
length
;
}
else
re
.
lastIndex
=
0
;
}
else
if
(
UPDATES_LAST_INDEX_WRONG
&&
match
)
{
re
.
lastIndex
=
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 /(.?)?/
call
(
nativeReplace
,
match
[
0
],
reCopy
,
function
()
{
for
(
i
=
1
;
i
<
arguments
.
length
-
2
;
i
++
)
{
if
(
arguments
[
i
]
===
undefined
)
match
[
i
]
=
undefined
;
}
});
}
if
(
match
&&
groups
)
{
match
.
groups
=
object
=
create
(
null
);
for
(
i
=
0
;
i
<
groups
.
length
;
i
++
)
{
group
=
groups
[
i
];
object
[
group
[
0
]]
=
match
[
group
[
1
]];
}
}
return
match
;
};
}
module
.
exports
=
patchedExec
;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Jul 4, 5:28 PM (3 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3346851
Attached To
rDWAPPS Web applications
Event Timeline
Log In to Comment