Fix toMatch
when re-using RegExp with 'g' flag
#9290
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #9283
When testing a regex with the
g
flag, the regular expression is notreset between assertions, such that subsequent assertions that should
pass, fail. The test below passes on Jest 23 but fails on 24:
It appears this behavior was introduced in c3a0167. Previously, Jest
cloned the regex with
new RegExp()
, which sidestepped the issue byusing a new regex for every assertion. This restores that behavior. The
issue here is due to somewhat confusing behavior in the way that regular
expressions with the
g
ory
flag behave. Internally, the regexkeeps a
lastIndex
and the next time it is matched against, itwill search from that index, or cycle back to 0 if no match is found:
Test plan
Added a new test.