JavaScript 正则表达式修饰符标志
正则表达式修饰符标志
标志是可以修改正则表达式模式使用方式的参数,例如使其不区分大小写或全局生效。
/pattern/flagsJavaScript 正则表达式标志
修订于 2025 年 7 月
| 标志 | 描述 |
|---|---|
| /d | 执行子字符串匹配(2022 年新增) |
| /g | 执行全局匹配(查找所有匹配项) |
| /i | 执行不区分大小写的匹配 |
| /m | 执行多行匹配 |
| /s | 允许使用点号 (.) 匹配行终止符(2018 年新增) |
| /u | 启用 Unicode 支持(2015 年新增) |
| /v | /u 标志的升级,以获得更好的 Unicode 支持(2025 年新增) |
| /y | 执行"粘性"搜索(2015 年新增) |
标志语法:/pattern/flags
| / | 正则表达式的起始分隔符 |
| pattern | 正则表达式(搜索条件) |
| / | 正则表达式的结束分隔符 |
| flags | 一个或多个单修饰符标志 |
正则表达式 /g 标志(Global 全局)
/g 标志会匹配模式的所有出现位置,而不仅仅是第一个。
示例
在字符串中全局搜索"is":
let text = "Is this all there is?";
const pattern = /is/g;
let result = text.match(pattern);
正则表达式 /i 标志(不区分大小写)
/i 标志使匹配不区分大小写:/abc/i 匹配 "abc", "AbC", "ABC"。
示例
在字符串中不区分大小写地搜索 "w3schools":
let text = "Visit W3Schools";
const pattern = /is/g;
let result = text.match(pattern);
正则表达式 /d 标志
/d 标志指定匹配的开始和结束位置。
示例
匹配所有以 aa 或 bb 开头或结尾的子文本:
let text = "aaaabb";
const pattern = /(aa)(bb)/d;
let result = text.match(pattern);亲自试一试 »正则表达式 /s 标志(单行/点号全部匹配)
/s 标志允许点号 (.) 元字符除了匹配任何其他字符外,还能匹配换行符 ()。
示例
如果没有 /s 标志,则不匹配 .(通配符):
let text = "LineLine.";
const pattern = /Line./gs;
let result = text.match(pattern);
亲自试一试 »正则表达式 /y 标志(粘性搜索):
/y 标志会从正则表达式对象的 lastIndex 属性开始执行"粘性"搜索。
/y 标志允许匹配从上次匹配结束的确切位置开始。
示例
let text = "abc def ghi";
const pattern = /\w+/y;
// 从第 4 位开始对比
pattern.lastIndex = 4;
let result = text.match(pattern);
亲自试一试 »
必须设置 /y 标志才能允许从指定位置进行匹配。
以下操作无效:
let text = "abc def ghi";
const pattern = /\w+/;
// 从第 4 位开始对比
pattern.lastIndex = 4;
let result = text.match(pattern);
亲自试一试 »注意
上面的示例使用了正则表达式元字符 /\w+/。
元字符 /\w+/ 的意思是"匹配任何单词"。
您将在接下来的章节中学习更多关于元字符的内容。
正则表达式 /u 标志(Unicode)
/u 标志启用正则表达式的完整 Unicode 支持。
默认情况下,JavaScript 正则表达式会将 4 字节的 Unicode 字符(例如表情符号或不太常用的符号)视为两个独立的 2 字节"代理"代码单元。
/u 标志会将模式视为 Unicode 代码点序列,这对于正确处理基本多文种平面 (BMP) 之外的字符至关重要。
示例
let text = "䷀";
const pattern = /\u{04DC0}/u;
// 返回 true:
let result = pattern.test(text);亲自试一试 »如果没有 /u 标志,正则表达式将无法识别 Unicode。
示例
let text = "䷀";
const pattern = /\u{04DC0}/;
// 返回 false:
let result = pattern.test(text);亲自试一试 »注意
JavaScript 2025 引入了 /v 标志,作为 /u 标志的"升级"。
/v 标志 启用了更多与 Unicode 相关的功能。
正则表达式 /v 标志(Unicode 集)
/v 标志是对 /u 标志的升级,旨在提供更好的 Unicode 支持。
它启用了更多与 Unicode 相关的功能。
新增功能包括:
- \p 转义序列匹配的是字符串,而不仅仅是字符。
- 字符类已升级,支持交集、并集和减法语法,以及匹配多个 Unicode 字符。
示例
let text = "Hello 😄";
const pattern = /\p{Emoji}/v;
// 返回 true:
let result = pattern.test(text);
亲自试一试 »如果没有 /v 标志,正则表达式将无法识别 Unicode。
示例
let text = "Hello 😄";
const pattern = /\p{Emoji}/;
// 返回 false:
let result = pattern.test(text);
亲自试一试 »正则表达式分组修饰符 (?flag)
(?flag) 语法是一种分组修饰符(内联标志修饰符)。
它允许修改模式中某个部分的标志,而不是整个模式。
(?flags:pattern) 仅对分组中的模式启用标志。
示例
i 标志仅对模式中的 W3Schools 部分启用。
let text = "W3Schools tutorials.";
const pattern = /(?i:WShools) tutorials/;
// 返回 true:
let result = pattern.test(text);亲自试一试 »
i 标志仅对模式中的 W3Schools 部分启用。
let text = "W3Schools Tutorials.";
const pattern = /(?i:W3Sshools) tutorials/;
// 返回 false:
let result = pattern.test(text);亲自试一试 »JavaScript 正则表达式标志属性
修订于 2025 年 7 月
| 属性 | 描述 |
|---|---|
| global | 如果设置了 /g 标志,则返回 true |
| hasIndices | 如果设置了 /d 标志,则返回 true |
| ignoreCase | 如果设置了 /i 标志,则返回 true |
| multiline | 如果设置了 /m 标志,则返回 true |
| dotAll | 如果设置了 /s 标志,则返回 true |
| sticky | 如果设置了 /y 标志,则返回 true |
| unicode | 如果设置了 /u 标志,则返回 true |
| unicodeSets | 如果设置了 /v 标志,则返回 true |
dotAll 属性
dotAll 属性在设置了 /s 标志时返回 true。
global (全局)属性
global 属性在设置 /g 标志时返回 true。
hasIndices 属性
hasIndices 属性在设置了 /d 标志时返回 true。
ignoreCase 属性
ignoreCase 属性在设置了 /i 标志时返回 true。
multiline (多行)属性
multiline 属性在设置 /m 标志时返回 true。
sticky (粘性)属性
sticky 属性在设置 /y 标志时返回 true。
unicode 属性
unicode 属性在设置了 /u 标志时返回 true。
unicodeSets 属性
unicodeSets 属性在设置了 /v 标志时返回 true。
正则表达式方法
正则表达式的搜索和替换可以使用不同的方法。
以下是最常用的方法:
字符串方法
| 方法 | 描述 |
|---|---|
| match(regex) | 返回结果数组 |
| matchAll(regex) | 返回结果迭代器 |
| replace(regex) | 返回一个新的字符串 |
| replaceAll(regex) | 返回一个新的字符串 |
| search(regex) | 返回第一个匹配项的索引 |
| split(regex) | 返回一个结果数组 |
正则表达式方法
| 方法 | 描述 |
|---|---|
| regex.exec() | 返回结果迭代器 |
| regex.test() | 返回 true 或 false |
