JavaScript RegExp Assertions 正则表达式断言
正则表达式断言
断言匹配边界和环视:
字符串边界和单词边界。
环视:前瞻和后瞻。
// 匹配字符串开头
const pattern = /^FreeW3C/;
// 匹配字符串结尾
const pattern = /FreeW3C$/;JavaScript 正则表达式断言
修订于 2025 年 7 月
| 语法 | 名称 | 描述 |
|---|---|---|
| ^ | 字符串边界 | 匹配字符串的开头 |
| $ | 字符串边界 | 匹配字符串的结尾 |
| \b | 单词边界 | 匹配单词的开头或结尾 |
| \B | 词边界 | 不匹配单词的开头或结尾 |
| (?=...) | 前瞻 | 匹配后续字符串 |
| (?!...) | 前瞻 | 不匹配后续字符串 |
| (?<=...) | 后瞻 | 匹配前一个字符串 |
| (?<!...) | 后瞻 | 不匹配前一个字符串 |
正则表达式 ^ 元字符
^ 元字符匹配字符串的开头。
示例
测试字符串是否以 FreeW3C 开头:
const pattern = /^FreeW3C/;
let text = "FreeW3C Tutorial";
let result = pattern.test(text); // true
const pattern = /^FreeW3C/;
let text = "Hello FreeW3C";
let result = pattern.test(text); // false
正则表达式 $ 元字符
$ 元字符匹配字符串的结尾。
测试字符串是否以 FreeW3C 结尾:
const pattern = /FreeW3C$/;
let text = "Hello FreeW3C";
let result = pattern.test(text); // true
亲自试一试 »
const pattern = /FreeW3C$/;
let text = "FreeW3C tutorial";
let result = pattern.test(text); // false
亲自试一试 »\b 元字符
\b 元字符匹配单词的开头或结尾。
示例
在单词的开头查找字符"LO":
let text = "HELLO, LOOK AT YOU!";
let result = text.search(/\bLO/);
查找单词末尾的字符"LO":
let text = "HELLO, LOOK AT YOU!";
let result = text.search(/LO\b/);
正则表达式前瞻 x(?=y)
如果 "x" 后面跟着 "y",则 x(?=y) 匹配 "x"。
示例
如果 "FreeW3C" 后面跟着 "Tutorials",则匹配 "FreeW3C"。
let text = "FreeW3C Tutorials";
let pattern = /FreeW3C(?= Tutorials)/;
let result = pattern.test(text);
亲自试一试 »负向前瞻 x(?!y)
如果 "x" 后面没有 "y",则 x(?!y) 匹配 "x"。
示例
let text = "Hello FreeW3C";
let pattern = /FreeW3C(?!Hello )/;
let result = pattern.test(text);
亲自试一试 »正则表达式后行断言 (?<=y)x
(?<=y)x 匹配 "x",前提是 "x" 前面有 "y"。
示例
匹配 "FreeW3C",前提是 "FreeW3C" 前面有 "Hello"。
let text = "Hello FreeW3C";
let pattern = /(?<=Hello )FreeW3C/;
let result = pattern.test(text);
亲自试一试 »否定后行断言 (?<!y)x
(?<!y)x 仅当"x"前面没有"y"时才匹配"x"。
示例
let text = "Hello FreeW3C";
let pattern = /(?<!Hello ) FreeW3C/;
let result = pattern.test(text);
亲自试一试 »正则表达式组
| 字符 | 描述 |
|---|---|
| (x) | 匹配 x 并保存 |
| (?<n>x) | 匹配 x 并将其标记为 n |
| (?flag:x) | 为 x 启用标志 |
| (?flag-flag:x) | 为 x 禁用标志 |
正则表达式捕获组 (x)
示例
let text = "Haha, haha, haha.";
const pattern = /(haha)+/;
let result = text.match(pattern);亲自试一试 »解释
- (haha) 捕获一组字符
- (haha)+ 匹配零个或多个该组字符
- text.match() 返回一个结果数组
- match.groups() 返回一个匹配项数组
命名捕获组 (?)
示例
const text = "Name: John Doe";
// 使用命名捕获组
const regex = /(?<firstName>\w+) (?<lastName>\w+)/;
const match = text.match(regex);
let fName = match.groups.firstName;
let lName = match.groups.lastName;
亲自试一试 »解释
- (?
\w+) 捕获一个单词并将其标记为 firstName - (?
\w+) 执行相同的操作,将 lastName 标记为 firstName - text.match() 返回一个包含 groups 属性的数组
- match.groups() 返回一个对象:
{firstName:"John", lastName:"Doe" }
使用捕获组时,字符串方法 match() 和正则表达式方法 exec() 会返回一个带有 groups 属性的匹配对象。此属性保存组的名称和值。
正则表达式分组修饰符 (?flag)
(?flag) 语法是一种分组修饰符(内联标志修饰符)。
它允许修改模式中某个部分的标志,而不是整个模式。
(?flags:pattern) 仅对组中的模式启用标志。
示例
i 标志仅对模式中的 FreeW3C 部分启用。
let text = "FreeW3C tutorials.";
const pattern = /(?i:FreeW3C) tutorials/;
// 返回 true:
let result = pattern.test(text);亲自试一试 »
i 标志仅对模式中的 FreeW3C 部分启用。
let text = "FreeW3C Tutorials.";
const pattern = /(?i:FreeW3C) tutorials/;
// 返回 false:
let result = pattern.test(text);亲自试一试 »另请参阅:
正则表达式方法
正则表达式的搜索和替换可以使用不同的方法。
以下是最常用的方法:
字符串方法
| 方法 | 描述 |
|---|---|
| match(regex) | 返回结果数组 |
| matchAll(regex) | 返回结果迭代器 |
| replace(regex) | 返回一个新的字符串 |
| replaceAll(regex) | 返回一个新的字符串 |
| search(regex) | 返回第一个匹配项的索引 |
| split(regex) | 返回一个结果数组 |
正则表达式方法
| 方法 | 描述 |
|---|---|
| regex.exec() | 返回结果迭代器 |
| regex.test() | 返回 true 或 false |
