mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 06:07:34 +00:00
LibRegex: Do not continue searching input when the sticky bit is set
This partially reverts commit a962ee020a
.
When the sticky bit is set, the global bit should basically be ignored
except by external callers who want their own special behavior. For
example, RegExp.prototype [ @@match ] will use the global flag to
accumulate consecutive matches. But on the first failure, the regex
loop should break.
This commit is contained in:
parent
222e580fa8
commit
27d3de1f17
2 changed files with 15 additions and 1 deletions
|
@ -180,6 +180,8 @@ RegexResult Matcher<Parser>::match(Vector<RegexStringView> const& views, Optiona
|
|||
#endif
|
||||
|
||||
bool continue_search = input.regex_options.has_flag_set(AllFlags::Global) || input.regex_options.has_flag_set(AllFlags::Multiline);
|
||||
if (input.regex_options.has_flag_set(AllFlags::Sticky))
|
||||
continue_search = false;
|
||||
|
||||
auto single_match_only = input.regex_options.has_flag_set(AllFlags::SingleMatch);
|
||||
|
||||
|
@ -280,7 +282,11 @@ RegexResult Matcher<Parser>::match(Vector<RegexStringView> const& views, Optiona
|
|||
break;
|
||||
continue;
|
||||
}
|
||||
if (state.string_position < view_length && !input.regex_options.has_flag_set(AllFlags::Internal_Stateful)) {
|
||||
if (input.regex_options.has_flag_set(AllFlags::Internal_Stateful)) {
|
||||
append_match(input, state, view_index);
|
||||
break;
|
||||
}
|
||||
if (state.string_position < view_length) {
|
||||
return { false, 0, {}, {}, {}, operations };
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue