修饰符: (?ims-ims:...)
语法
正则表达式
(?flags1:pattern)
(?flags1-flags2:pattern)
注意: JavaScript 只有 "有界" 修饰符形式,其中模式放在修饰符组内。大多数其他支持修饰符的语言都有 "无界" 形式,其中修饰符应用于最近包含组的末尾。
参数
描述
某些标志会更改正则表达式语法元素的含义
i
标志通过使所有 字面字符 和 字符类 隐式变为小写,使正则表达式不区分大小写。m
标志会更改 输入边界断言^
和$
的行为,使其除了匹配输入字符串的开头和结尾之外,还匹配每行的开头和结尾。s
标志会更改 通配符.
字符的行为,使其匹配任何字符,包括行终止符。
有时您可能希望这些更改仅在正则表达式模式的特定部分生效。您可以通过将该部分括在修饰符中来实现。例如
js
/(?i:Hello) world/;
在这个正则表达式中,i
标志仅对模式的 Hello
部分启用。world
部分区分大小写。因此,它匹配 Hello world
、hello world
和 HELLO world
,但不匹配 HELLO WORLD
。以下等效,通过全局启用 i
标志,然后对 world
部分禁用它
js
/Hello (?-i:world)/i;
flags1
和 flags2
参数可以包含 i
、m
和 s
的任何组合。但是,标志在 flags1
和 flags2
之间必须全部唯一 - 您不能两次启用或禁用标志,也不能先启用标志,然后立即禁用它。
flags1
和 flags2
参数是可选的,但至少必须有一个非空。(?flags1-:pattern)
是一个仅启用标志的修饰符(等效于 (?flags1:pattern)
)。(?-flags2:pattern)
是一个仅禁用标志的修饰符。(?:pattern)
只是一个 非捕获组,而 (?-:pattern)
是一个语法错误。
其他标志在修饰符中没有意义,因此如果包含它们将是语法错误
示例
仅在字符串开头匹配多行格式
以下正则表达式定义了多行字符串的格式。第一个 ^
代表整个输入字符串的开头,因为在 (?-m:)
修饰符中,而所有其他 ^
字符代表行的开头
js
const pattern = /(?-m:^)---\n^title:.*^slug:.*^---/ms;
const input = `---
title: "Modifier: (?ims-ims:...)"
slug: Web/JavaScript/Reference/Regular_expressions/Modifier
---`;
pattern.test(input); // true
// Extra line break at the start of string
const input2 = `\n${input}`;
pattern.test(input2); // false
不区分大小写地匹配某些单词
假设您要查找所有名为 foo
或 bar
的变量声明(因为它们是糟糕的名称)。该词可能会以任何大小写形式出现,但您知道关键字始终为小写,因此您可以这样做
js
const pattern = /(?:var|let|const) (?i:foo|bar)\b/i;
pattern.test("let foo;"); // true
pattern.test("const BAR = 1;"); // true
pattern.test("Let foo be a number"); // false
规范
规范 |
---|
未知规范 # 语法 |
浏览器兼容性
BCD 表仅在浏览器中加载