Source code
Revision control
Copy as Markdown
Other Tools
var BUGNUMBER = 1135377;
var summary = "Implement RegExp unicode flag -- AdvanceStringIndex in global match and replace.";
print(BUGNUMBER + ": " + summary);
// ==== String.prototype.match ====
assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".match(/\uD83D|X|/gu),
["", "", "X", "", ""]);
assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".match(/\uDC38|X|/gu),
["", "", "X", "", ""]);
assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".match(/\uD83D\uDC38|X|/gu),
["\uD83D\uDC38", "", "X", "", ""]);
// ==== String.prototype.replace ====
// empty string replacement (optimized)
assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uD83D|X|/gu, ""),
"\uD83D\uDC38\uD83D\uDC39\uD83D\uDC3A");
assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uDC38|X|/gu, ""),
"\uD83D\uDC38\uD83D\uDC39\uD83D\uDC3A");
assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uD83D\uDC38|X|/gu, ""),
"\uD83D\uDC39\uD83D\uDC3A");
// non-empty string replacement
assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uD83D|X|/gu, "x"),
"x\uD83D\uDC38x\uD83D\uDC39xx\uD83D\uDC3Ax");
assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uDC38|X|/gu, "x"),
"x\uD83D\uDC38x\uD83D\uDC39xx\uD83D\uDC3Ax");
assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uD83D\uDC38|X|/gu, "x"),
"xx\uD83D\uDC39xx\uD83D\uDC3Ax");
// ==== String.prototype.split ====
assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".split(/\uD83D|X|/u),
["\uD83D\uDC38", "\uD83D\uDC39", "\uD83D\uDC3A"]);
assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".split(/\uDC38|X|/u),
["\uD83D\uDC38", "\uD83D\uDC39", "\uD83D\uDC3A"]);
assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".split(/\uD83D\uDC38|X|/u),
["", "\uD83D\uDC39", "\uD83D\uDC3A"]);
if (typeof reportCompare === "function")
reportCompare(true, true);