diff --git a/Makefile b/Makefile index 12e02a8..4cbfc90 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,6 @@ export TERST_BASE=$(PWD) -TEST := -v --run RegExp TEST := -v --run Otto TEST := -v --run underscore TEST := -v --run underscoreCollection @@ -20,6 +19,7 @@ TEST := -v --run OttoError TEST := -v --run API TEST := -v --run IsValidRegExp TEST := -v --run ParseFailure +TEST := -v --run RegExp TEST := . test: test-i diff --git a/otto_test.go b/otto_test.go index 903b2d7..c1f886e 100644 --- a/otto_test.go +++ b/otto_test.go @@ -1468,6 +1468,17 @@ func TestRegExp(t *testing.T) { test(`/abc/.toString()`, "/abc/") test(`/abc/gim.toString()`, "/abc/gim") test(`""+/abc/gi`, "/abc/gi") + + result := test(`/(a)?/.exec('b')`, ",") + Is(result._object().Get("0"), "") + Is(result._object().Get("1"), "undefined") + Is(result._object().Get("length"), "2") + + result = test(`/(a)?(b)?/.exec('b')`, "b,,b") + Is(result._object().Get("0"), "b") + Is(result._object().Get("1"), "undefined") + Is(result._object().Get("2"), "b") + Is(result._object().Get("length"), "3") } func TestnewFunction(t *testing.T) { diff --git a/type_regexp.go b/type_regexp.go index fb6f95e..bc497fe 100644 --- a/type_regexp.go +++ b/type_regexp.go @@ -89,7 +89,11 @@ func execResultToArray(runtime *_runtime, target string, result []int) *_object valueArray := make([]Value, captureCount) for index := 0; index < captureCount; index++ { offset := 2 * index - valueArray[index] = toValue(target[result[offset]:result[offset+1]]) + if result[offset] != -1 { + valueArray[index] = toValue(target[result[offset]:result[offset+1]]) + } else { + valueArray[index] = UndefinedValue() + } } return runtime.newArray(valueArray) }