int *captures;
u_char *start;
int32_t size, length;
+ uint32_t index;
njs_int_t ret;
njs_uint_t i, n;
njs_array_t *array;
goto fail;
}
- njs_set_number(&prop->value, njs_string_index(string, captures[0]));
+ if (type == NJS_REGEXP_UTF8) {
+ index = njs_string_index(string, captures[0]);
+
+ } else {
+ index = captures[0];
+ }
+
+ njs_set_number(&prop->value, index);
if (pattern->global) {
- njs_set_number(®exp->last_index,
- njs_string_index(string, captures[1]));
+ if (type == NJS_REGEXP_UTF8) {
+ index = njs_string_index(string, captures[1]);
+
+ } else {
+ index = captures[1];
+ }
+
+ njs_set_number(®exp->last_index, index);
}
lhq.key_hash = NJS_INDEX_HASH;
{ njs_str("RegExp.prototype[Symbol.replace].call(/b/, 'abc','B')"),
njs_str("aBc") },
+ { njs_str("String.bytesFrom([253,242,141,10]).replace(/\\s/g, 'X')[3]"),
+ njs_str("X") },
+
+ { njs_str("String.bytesFrom([255,149,15,97,95]).replace(/_/g, 'X')[4]"),
+ njs_str("X") },
+
{ njs_str("/]/"),
njs_str("/\\]/") },
#endif
{ njs_str("var r = /\\x80/g; r.exec('\\u0081\\u0080'.toBytes());"
- "r.lastIndex +' '+ r.source +' '+ r.source.length +' '+ r"),
- njs_str("1 \\x80 4 /\\x80/g") },
+ "r.lastIndex +' '+ r.source +' '+ r.source.length +' '+ r"),
+ njs_str("2 \\x80 4 /\\x80/g") },
+
+ { njs_str("var r = /_/g; var index = r.exec(String.bytesFrom([255,149,15,97,95])).index;"
+ "[index, r.lastIndex]"),
+ njs_str("4,5") },
{ njs_str("var descs = Object.getOwnPropertyDescriptors(RegExp('a'));"
"Object.keys(descs)"),