diff --git a/dlls/jscript/regexp.c b/dlls/jscript/regexp.c index 0c8a4193512..bcc16654f7d 100644 --- a/dlls/jscript/regexp.c +++ b/dlls/jscript/regexp.c @@ -3349,8 +3349,13 @@ static HRESULT do_regexp_match_next(script_ctx_t *ctx, RegExpInstance *regexp, c *parens_cnt = regexp->jsregexp->parenCount; for(i=0; i < regexp->jsregexp->parenCount; i++) { - (*parens)[i].str = *cp + result->parens[i].index; - (*parens)[i].len = result->parens[i].length; + if(result->parens[i].index == -1) { + (*parens)[i].str = NULL; + (*parens)[i].len = 0; + }else { + (*parens)[i].str = *cp + result->parens[i].index; + (*parens)[i].len = result->parens[i].length; + } } } diff --git a/dlls/jscript/tests/regexp.js b/dlls/jscript/tests/regexp.js index bcc9aba67ae..9a14a934dd8 100644 --- a/dlls/jscript/tests/regexp.js +++ b/dlls/jscript/tests/regexp.js @@ -71,6 +71,11 @@ m = re.exec(); ok(m === null, "m is not null"); ok(re.lastIndex === 0, "re.lastIndex = " + re.lastIndex); +m = /(a|b)+|(c)/.exec("aa"); +ok(m[0] === "aa", "m[0] = " + m[0]); +ok(m[1] === "a", "m[1] = " + m[1]); +ok(m[2] === "", "m[2] = " + m[2]); + b = re.test(" a "); ok(b === true, "re.test(' a ') returned " + b); ok(re.lastIndex === 3, "re.lastIndex = " + re.lastIndex);