mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8191819: String.prototype.match should follow ES6 specification
Reviewed-by: sundar
This commit is contained in:
parent
7e43455ead
commit
0a304e24b0
2 changed files with 39 additions and 8 deletions
|
@ -689,19 +689,17 @@ public final class NativeString extends ScriptObject implements OptimisticBuilti
|
|||
|
||||
nativeRegExp.setLastIndex(0);
|
||||
|
||||
int previousLastIndex = 0;
|
||||
final List<Object> matches = new ArrayList<>();
|
||||
|
||||
Object result;
|
||||
// We follow ECMAScript 6 spec here (checking for empty string instead of previous index)
|
||||
// as the ES5 specification is buggy and causes empty strings to be matched twice.
|
||||
while ((result = nativeRegExp.exec(str)) != null) {
|
||||
final int thisIndex = nativeRegExp.getLastIndex();
|
||||
if (thisIndex == previousLastIndex) {
|
||||
nativeRegExp.setLastIndex(thisIndex + 1);
|
||||
previousLastIndex = thisIndex + 1;
|
||||
} else {
|
||||
previousLastIndex = thisIndex;
|
||||
final String matchStr = JSType.toString(((ScriptObject)result).get(0));
|
||||
if (matchStr.isEmpty()) {
|
||||
nativeRegExp.setLastIndex(nativeRegExp.getLastIndex() + 1);
|
||||
}
|
||||
matches.add(((ScriptObject)result).get(0));
|
||||
matches.add(matchStr);
|
||||
}
|
||||
|
||||
if (matches.isEmpty()) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue