本文总结了JavaScript正则表达式的主要API,分为正则对象创建、实例属性、实例方法和字符串方法四类。
正则对象可通过构造函数或字面量创建,实例属性包括source、flags及各类匹配标志(g/i/m等)。
实例方法test()用于测试匹配,exec()执行搜索匹配。
字符串原型方法如match()、replace()等支持正则操作。
ES6+新增了unicodeSets、hasIndices等特性。
文中还提供了常用标志说明和使用示例,包括创建正则、测试匹配、提取结果和替换内容等典型场景,完整覆盖了JavaScript正则表达式的核心功能。
关联阅读推荐
JavaScript 正则表达式 API 总结表格
| 类别 | API/方法 | 所属对象 | 功能描述 | 返回值 | 示例 |
|---|---|---|---|---|---|
| 正则对象创建 | new RegExp(pattern, flags) |
RegExp 构造函数 | 动态创建正则表达式对象 | RegExp 对象 | new RegExp('\\d+', 'g') |
/pattern/flags |
字面量语法 | 静态创建正则表达式对象 | RegExp 对象 | /\d+/g |
|
| 正则实例属性 | .source |
RegExp 实例 | 获取正则模式字符串(不含flags) | 字符串 | /ab/.source → "ab" |
.flags |
RegExp 实例 | 获取正则标志字符串 | 字符串 | /ab/gi.flags → "gi" |
|
.global |
RegExp 实例 | 是否启用全局匹配(g标志) | 布尔值 | /ab/g.global → true |
|
.ignoreCase |
RegExp 实例 | 是否忽略大小写(i标志) | 布尔值 | /ab/i.ignoreCase → true |
|
.multiline |
RegExp 实例 | 是否多行模式(m标志) | 布尔值 | /ab/m.multiline → true |
|
.dotAll |
RegExp 实例 | 是否让.匹配所有字符(s标志,ES2018) |
布尔值 | /ab/s.dotAll → true |
|
.unicode |
RegExp 实例 | 是否启用Unicode模式(u标志) | 布尔值 | /ab/u.unicode → true |
|
.sticky |
RegExp 实例 | 是否启用粘连模式(y标志) | 布尔值 | /ab/y.sticky → true |
|
.lastIndex |
RegExp 实例 | 下次匹配开始的索引(仅当g或y标志时有效) | 数字 | 可读写属性,用于控制匹配位置 | |
| 正则实例方法 | .test(string) |
RegExp 实例 | 测试字符串是否匹配模式 | 布尔值 | /\d+/.test("123") → true |
.exec(string) |
RegExp 实例 | 执行搜索匹配,返回匹配结果数组 | 数组或null | /(\d+)/.exec("ab123") → ["123", "123"] |
|
| 字符串方法 | .match(regexp) |
String 原型 | 返回字符串匹配正则的结果 | 数组或null | "ab123".match(/\d+/) → ["123"] |
.matchAll(regexp) |
String 原型 | 返回所有匹配的迭代器(需g标志) | 迭代器 | Array.from("a1 b2".matchAll(/\d/g)) |
|
.search(regexp) |
String 原型 | 返回第一个匹配的索引 | 数字(索引) | "ab123".search(/\d+/) → 2 |
|
.replace(regexp, replacement) |
String 原型 | 替换匹配的子串 | 新字符串 | "a1b2".replace(/\d/g, "#") → "a#b#" |
|
.replaceAll(regexp, replacement) |
String 原型 | 替换所有匹配的子串(需g标志) | 新字符串 | "a1b2".replaceAll(/\d/g, "#") → "a#b#" |
|
.split(separator) |
String 原型 | 使用正则或字符串分隔字符串 | 数组 | "a,b,c".split(/,/) → ["a","b","c"] |
|
| 正则静态属性 | RegExp.$1-$9 |
RegExp 构造函数 | 最近一次匹配的分组捕获(已废弃,避免使用) | 字符串 | 非标准,建议使用exec/match的结果 |
RegExp.input ($_) |
RegExp 构造函数 | 最近一次匹配的输入字符串(已废弃) | 字符串 | 非标准,避免使用 | |
| ES6+ 新增 | RegExp.prototype.unicodeSets |
RegExp 实例 | 是否启用Unicode集合模式(v标志,ES2024) | 布尔值 | /\p{Script=Greek}/v.unicodeSets → true |
RegExp.prototype.hasIndices |
RegExp 实例 | 是否捕获匹配的索引(d标志,ES2022) | 布尔值 | /(a+)/d.hasIndices → true |
|
RegExp.prototype.exec() 返回的 indices |
RegExp 实例 | 包含每个捕获组开始和结束索引的数组(需d标志) | 数组 | /(a+)/d.exec("baaab").indices → [[1,4],[1,4]] |
常用正则标志说明
| 标志 | 名称 | 作用 |
|---|---|---|
g |
global | 全局匹配,查找所有匹配项 |
i |
ignoreCase | 忽略大小写 |
m |
multiline | 多行模式,^和$匹配每行的开始和结束 |
u |
unicode | 启用完整的Unicode支持 |
y |
sticky | 粘性匹配,从lastIndex开始精确匹配 |
s |
dotAll | 让.匹配包括换行符的所有字符 |
d |
hasIndices | 生成匹配结果的开始和结束索引 |
v |
unicodeSets | 增强的Unicode集合模式(ES2024) |
使用示例
javascript
// 1. 创建正则表达式
const regex1 = /\d+/g; // 字面量
const regex2 = new RegExp('\\d+', 'g'); // 构造函数
// 2. 测试匹配
console.log(regex1.test("123abc")); // true
// 3. 提取匹配结果
const match = "abc123def456".match(/\d+/g);
console.log(match); // ["123", "456"]
// 4. 替换内容
const replaced = "2023-01-15".replace(/(\d{4})-(\d{2})-(\d{2})/, "$2/$3/$1");
console.log(replaced); // "01/15/2023"
// 5. 使用exec进行迭代(全局匹配时)
const regex = /\d+/g;
let result;
while ((result = regex.exec("a1 b2 c3")) !== null) {
console.log(`找到 ${result[0]},位置:${result.index}`);
}
这个表格涵盖了 JavaScript 正则表达式的主要 API,包括创建、属性、方法和相关的字符串方法。