Get to know MDN better
Since September 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
A modifier overrides flag settings in a specific part of a regular expression. It can be used to enable or disable flags that change the meanings of certain regex syntax elements. These flags are i, m, and s.
Note: JavaScript only has the "bounded" modifier form, where the pattern is placed inside the modifier group. Most other languages that support modifiers have an "unbounded" form, where the modifier is applied until the end of the closest containing group.
A string of flags to enable. Can contain any combination of i, m, and s.
flags2 OptionalA string of flags to disable. Can contain any combination of i, m, and s, but must not contain any flags included in flags1.
patternA pattern consisting of anything you may use in a regex literal, including a disjunction.
Some flags change the meanings of regex syntax elements:
Sometimes you may want these changes to only take effect in a specific part of a regex pattern. You can do so by wrapping that part in a modifier. For example:
In this regex, the i flag is only enabled for the Hello part of the pattern. The world part is case-sensitive. Therefore, it matches Hello world, hello world, and HELLO world, but not HELLO WORLD. The following is equivalent, by enabling the i flag globally, and then disabling it for the world part:
The flags1 and flags2 parameters can contain any combination of i, m, and s. However, the flags must all be unique between flags1 and flags2—you cannot enable or disable a flag twice, or enable a flag and then immediately disable it.
The flags1 and flags2 parameters are optional, but at least one must be non-empty. (?flags1-:pattern) is a modifier that only enables flags (equivalent to (?flags1:pattern)). (?-flags2:pattern) is a modifier that only disables flags. (?:pattern) is just a non-capturing group, and (?-:pattern) is a syntax error.
Other flags don't make sense in a modifier and are thus syntax errors if included:
The following regex defines a format for a multiline string. The first ^ represents the start of the whole input string, by being inside a (?-m:) modifier, while all other ^ characters represent the start of a line:
Imagine you are finding all variable declarations called foo or bar (because they are bad names). The word may appear in any case, but you know the keyword is always lowercase, so you can do this:
| ECMAScript® 2027 Language Specification # prod-RegularExpressionModifiers |
Enable JavaScript to view this browser compatibility table.
This page was last modified on Jul 8, 2025 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.