} else {
/* UTF-8 string. */
- p = njs_string_utf8_offset(string->start, end, index);
+ p = (index < string->length)
+ ? njs_string_utf8_offset(string->start, end, index)
+ : end;
end -= search->size - 1;
while (p < end) {
njs_int_t ret;
njs_str_t str;
njs_chb_t chain;
- njs_bool_t is_ascii_string;
njs_value_t *this, *search, *replace;
njs_value_t search_lvalue, replace_lvalue, replacer, value,
arguments[3];
p_start = string.start;
increment = s.length != 0 ? s.length : 1;
- is_ascii_string = njs_is_ascii_string(&string);
do {
if (func_replace == NULL) {
}
}
- if (is_ascii_string) {
- p = string.start + pos;
-
- } else {
- p = njs_string_utf8_offset(string.start, string.start + string.size,
- pos);
- }
-
+ p = njs_string_offset(&string, pos);
(void) njs_string_prop(&ret_string, &value);
njs_chb_append(&chain, p_start, p - p_start);
/* UTF-8 string. */
+ if (index == (int64_t) string->length) {
+ return string->start + string->size;
+ }
+
return njs_string_utf8_offset(string->start, string->start + string->size,
index);
}
{ njs_str("var r = 'αβγ'.replaceAll('', 'X'); [r, r.length]"),
njs_str("XαXβXγX,7") },
+ { njs_str("var r = ''.replaceAll('', 'z'); [r, r.length]"),
+ njs_str("z,1") },
+
+ { njs_str("var r = 'α'.padStart(32).replaceAll('', 'z'); [r, r.length]"),
+ njs_str("z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z zαz,65") },
+
{ njs_str("'abc'.replace('b', (m, o, s) => `|${s}|${o}|${m}|`)"),
njs_str("a|abc|1|b|c") },