Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9123280
es.string.split.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Subscribers
None
es.string.split.js
View Options
'use strict'
;
var
apply
=
require
(
'../internals/function-apply'
);
var
call
=
require
(
'../internals/function-call'
);
var
uncurryThis
=
require
(
'../internals/function-uncurry-this'
);
var
fixRegExpWellKnownSymbolLogic
=
require
(
'../internals/fix-regexp-well-known-symbol-logic'
);
var
isRegExp
=
require
(
'../internals/is-regexp'
);
var
anObject
=
require
(
'../internals/an-object'
);
var
requireObjectCoercible
=
require
(
'../internals/require-object-coercible'
);
var
speciesConstructor
=
require
(
'../internals/species-constructor'
);
var
advanceStringIndex
=
require
(
'../internals/advance-string-index'
);
var
toLength
=
require
(
'../internals/to-length'
);
var
toString
=
require
(
'../internals/to-string'
);
var
getMethod
=
require
(
'../internals/get-method'
);
var
arraySlice
=
require
(
'../internals/array-slice-simple'
);
var
callRegExpExec
=
require
(
'../internals/regexp-exec-abstract'
);
var
regexpExec
=
require
(
'../internals/regexp-exec'
);
var
stickyHelpers
=
require
(
'../internals/regexp-sticky-helpers'
);
var
fails
=
require
(
'../internals/fails'
);
var
UNSUPPORTED_Y
=
stickyHelpers
.
UNSUPPORTED_Y
;
var
MAX_UINT32
=
0xFFFFFFFF
;
var
min
=
Math
.
min
;
var
$push
=
[].
push
;
var
exec
=
uncurryThis
(
/./
.
exec
);
var
push
=
uncurryThis
(
$push
);
var
stringSlice
=
uncurryThis
(
''
.
slice
);
// Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
// Weex JS has frozen built-in prototypes, so use try / catch wrapper
var
SPLIT_WORKS_WITH_OVERWRITTEN_EXEC
=
!
fails
(
function
()
{
// eslint-disable-next-line regexp/no-empty-group -- required for testing
var
re
=
/(?:)/
;
var
originalExec
=
re
.
exec
;
re
.
exec
=
function
()
{
return
originalExec
.
apply
(
this
,
arguments
);
};
var
result
=
'ab'
.
split
(
re
);
return
result
.
length
!==
2
||
result
[
0
]
!==
'a'
||
result
[
1
]
!==
'b'
;
});
// @@split logic
fixRegExpWellKnownSymbolLogic
(
'split'
,
function
(
SPLIT
,
nativeSplit
,
maybeCallNative
)
{
var
internalSplit
;
if
(
'abbc'
.
split
(
/(b)*/
)[
1
]
==
'c'
||
// eslint-disable-next-line regexp/no-empty-group -- required for testing
'test'
.
split
(
/(?:)/
,
-
1
).
length
!=
4
||
'ab'
.
split
(
/(?:ab)*/
).
length
!=
2
||
'.'
.
split
(
/(.?)(.?)/
).
length
!=
4
||
// eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing
'.'
.
split
(
/()()/
).
length
>
1
||
''
.
split
(
/.?/
).
length
)
{
// based on es5-shim implementation, need to rework it
internalSplit
=
function
(
separator
,
limit
)
{
var
string
=
toString
(
requireObjectCoercible
(
this
));
var
lim
=
limit
===
undefined
?
MAX_UINT32
:
limit
>>>
0
;
if
(
lim
===
0
)
return
[];
if
(
separator
===
undefined
)
return
[
string
];
// If `separator` is not a regex, use native split
if
(
!
isRegExp
(
separator
))
{
return
call
(
nativeSplit
,
string
,
separator
,
lim
);
}
var
output
=
[];
var
flags
=
(
separator
.
ignoreCase
?
'i'
:
''
)
+
(
separator
.
multiline
?
'm'
:
''
)
+
(
separator
.
unicode
?
'u'
:
''
)
+
(
separator
.
sticky
?
'y'
:
''
);
var
lastLastIndex
=
0
;
// Make `global` and avoid `lastIndex` issues by working with a copy
var
separatorCopy
=
new
RegExp
(
separator
.
source
,
flags
+
'g'
);
var
match
,
lastIndex
,
lastLength
;
while
(
match
=
call
(
regexpExec
,
separatorCopy
,
string
))
{
lastIndex
=
separatorCopy
.
lastIndex
;
if
(
lastIndex
>
lastLastIndex
)
{
push
(
output
,
stringSlice
(
string
,
lastLastIndex
,
match
.
index
));
if
(
match
.
length
>
1
&&
match
.
index
<
string
.
length
)
apply
(
$push
,
output
,
arraySlice
(
match
,
1
));
lastLength
=
match
[
0
].
length
;
lastLastIndex
=
lastIndex
;
if
(
output
.
length
>=
lim
)
break
;
}
if
(
separatorCopy
.
lastIndex
===
match
.
index
)
separatorCopy
.
lastIndex
++
;
// Avoid an infinite loop
}
if
(
lastLastIndex
===
string
.
length
)
{
if
(
lastLength
||
!
exec
(
separatorCopy
,
''
))
push
(
output
,
''
);
}
else
push
(
output
,
stringSlice
(
string
,
lastLastIndex
));
return
output
.
length
>
lim
?
arraySlice
(
output
,
0
,
lim
)
:
output
;
};
// Chakra, V8
}
else
if
(
'0'
.
split
(
undefined
,
0
).
length
)
{
internalSplit
=
function
(
separator
,
limit
)
{
return
separator
===
undefined
&&
limit
===
0
?
[]
:
call
(
nativeSplit
,
this
,
separator
,
limit
);
};
}
else
internalSplit
=
nativeSplit
;
return
[
// `String.prototype.split` method
// https://tc39.es/ecma262/#sec-string.prototype.split
function
split
(
separator
,
limit
)
{
var
O
=
requireObjectCoercible
(
this
);
var
splitter
=
separator
==
undefined
?
undefined
:
getMethod
(
separator
,
SPLIT
);
return
splitter
?
call
(
splitter
,
separator
,
O
,
limit
)
:
call
(
internalSplit
,
toString
(
O
),
separator
,
limit
);
},
// `RegExp.prototype[@@split]` method
// https://tc39.es/ecma262/#sec-regexp.prototype-@@split
//
// NOTE: This cannot be properly polyfilled in engines that don't support
// the 'y' flag.
function
(
string
,
limit
)
{
var
rx
=
anObject
(
this
);
var
S
=
toString
(
string
);
var
res
=
maybeCallNative
(
internalSplit
,
rx
,
S
,
limit
,
internalSplit
!==
nativeSplit
);
if
(
res
.
done
)
return
res
.
value
;
var
C
=
speciesConstructor
(
rx
,
RegExp
);
var
unicodeMatching
=
rx
.
unicode
;
var
flags
=
(
rx
.
ignoreCase
?
'i'
:
''
)
+
(
rx
.
multiline
?
'm'
:
''
)
+
(
rx
.
unicode
?
'u'
:
''
)
+
(
UNSUPPORTED_Y
?
'g'
:
'y'
);
// ^(? + rx + ) is needed, in combination with some S slicing, to
// simulate the 'y' flag.
var
splitter
=
new
C
(
UNSUPPORTED_Y
?
'^(?:'
+
rx
.
source
+
')'
:
rx
,
flags
);
var
lim
=
limit
===
undefined
?
MAX_UINT32
:
limit
>>>
0
;
if
(
lim
===
0
)
return
[];
if
(
S
.
length
===
0
)
return
callRegExpExec
(
splitter
,
S
)
===
null
?
[
S
]
:
[];
var
p
=
0
;
var
q
=
0
;
var
A
=
[];
while
(
q
<
S
.
length
)
{
splitter
.
lastIndex
=
UNSUPPORTED_Y
?
0
:
q
;
var
z
=
callRegExpExec
(
splitter
,
UNSUPPORTED_Y
?
stringSlice
(
S
,
q
)
:
S
);
var
e
;
if
(
z
===
null
||
(
e
=
min
(
toLength
(
splitter
.
lastIndex
+
(
UNSUPPORTED_Y
?
q
:
0
)),
S
.
length
))
===
p
)
{
q
=
advanceStringIndex
(
S
,
q
,
unicodeMatching
);
}
else
{
push
(
A
,
stringSlice
(
S
,
p
,
q
));
if
(
A
.
length
===
lim
)
return
A
;
for
(
var
i
=
1
;
i
<=
z
.
length
-
1
;
i
++
)
{
push
(
A
,
z
[
i
]);
if
(
A
.
length
===
lim
)
return
A
;
}
q
=
p
=
e
;
}
}
push
(
A
,
stringSlice
(
S
,
p
));
return
A
;
}
];
},
!
SPLIT_WORKS_WITH_OVERWRITTEN_EXEC
,
UNSUPPORTED_Y
);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Jun 21, 5:15 PM (1 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3367433
Attached To
rDWAPPS Web applications
Event Timeline
Log In to Comment