JavaScript RegExp 正则表达式:标记、属性与方法详解

青禾
青禾
发布时间:2026-10-15| 4人浏览过
原创

JavaScript 中的 RegExp 对象用于定义规则以执行字符串匹配和查找操作。理解其匹配模式标记(g、i、m)、实例属性(如 source、lastIndex)及核心方法(exec、test)是高效处理文本数据的基础。

1. 匹配模式标记

正则表达式支持三种常用的模式标记,用于控制匹配行为:

  • g (global):全局模式。默认情况下,找到第一个匹配项后即停止;添加此标记后将继续搜索直到字符串末尾。
  • i (ignoreCase):不区分大小写模式。使匹配过程忽略字母的大小写差异。
  • m (multiline):多行匹配模式。允许 ^ 和 $ 在每行的开头和结尾进行匹配,而非仅在整个字符串的开头和结尾。

可以通过两种形式创建正则表达式:字面量形式和构造函数形式。

// 使用字面量,匹配 "bat" 或 "cat",不区分大小写
var pattern1 = /[bc]at/i;

// 使用构造函数,等效于上述代码
var pattern2 = new RegExp("[bc]at", "i");

注意:当使用 new RegExp() 构造函数时,模式参数需要是字符串。因此,正则表达式中的特殊字符需要进行双重转义。例如:

  • /\[bc\]at/ 转换为字符串为 "\\[bc\\]at"
  • /\.at/ 转换为字符串为 "\\.at"
  • /\d.\d{1,2}/ 转换为字符串为 "\\d.\\d{1,2}"

2. RegExp 实例属性

每个 RegExp 实例都包含一系列只读属性,反映该正则表达式的配置和状态:

  • global:布尔值,表示是否设置了 g 标志。
  • ignoreCase:布尔值,表示是否设置了 i 标志。
  • multiline:布尔值,表示是否设置了 m 标志。
  • lastIndex:整数,指定在字符串中下一次开始搜索的位置。仅在启用 g 标志时有意义。
  • source:字符串,返回正则表达式的字面量形式原文。
var pattern = new RegExp("\\[bc\\]at", "i");
console.log(pattern.source); // 输出: "\\[bc\\]at"

3. RegExp 实例方法

exec() 和 test() 是 RegExp 最常用的两个方法,用于执行匹配检测。

第1步:使用 exec() 获取详细匹配信息

exec(string) 接受一个字符串参数,返回一个包含匹配信息的数组对象(如果没有匹配则返回 null)。返回的对象还包含 index(匹配位置)和 input(被搜索的字符串)属性。

var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;

var matches = pattern.exec(text);
console.log(matches.index);      // 0
console.log(matches.input);      // "mom and dad and baby"
console.log(matches[0]);         // "mom and dad and baby" (完整匹配)
console.log(matches[1]);         // " and dad and baby" (第一捕获组)
console.log(matches[2]);         // " and baby" (第二捕获组)
  • 非全局模式 (g):每次调用 exec() 都从字符串开头开始搜索,返回相同的匹配结果。
  • 全局模式 (g):每次调用 exec() 会从 lastIndex 指定的位置开始搜索,并更新 lastIndex 的值以指向下一个匹配的起始位置。

第2步:使用 test() 进行快速验证

test(string) 同样接受一个字符串参数,但仅返回布尔值:true 表示存在匹配,false 表示无匹配。它是判断字符串是否符合某种格式(如邮箱、手机号)的最快捷方式。

var text = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;

if (pattern.test(text)) {
    console.log("匹配成功!");
} else {
    console.log("匹配失败。");
}

4. RegExp 构造函数静态属性

RegExp 构造函数自身也拥有一些静态属性,它们存储的是最近一次执行的匹配相关信息。这些属性并非所有浏览器都完全兼容(如 Opera 对部分属性支持有限),但在调试和某些特定场景下仍具参考价值。

  • RegExp.input ($_):最近一次被匹配的字符串。
  • RegExp.lastMatch ($&):最近一次的匹配项。
  • RegExp.leftContext ($`):匹配项之前的文本。
  • RegExp.rightContext ($'):匹配项之后的文本。
  • RegExp.multiline ($*):布尔值,表示当前是否处于多行模式。
  • RegExp.lastParen ($+):如果正则表达式中有捕获组,则保存最近一次的捕获组内容。
  • RegExp.$1 ~ RegExp.$9:分别保存第 1 到第 9 个捕获组的匹配内容。

以下示例展示了如何通过这些属性提取上下文信息:

var text = "this has been a short summer";
var pattern = /(.)host/g;

if (pattern.test(text)) {
    console.log(RegExp.input);       // "this has been a short summer"
    console.log(RegExp.lastMatch);   // "short"
    console.log(RegExp.lastParen);   // "s" (如果 lastMatch 有捕获组)
    console.log(RegExp.leftContext); // "this has been a "
    console.log(RegExp.rightContext);// " summer"
}

// 演示捕获组静态变量
var text2 = "this has been a short summer";
var pattern2 = /(..)or(.)/g;
pattern2.test(text2);
console.log(RegExp.$1); // "sh"
console.log(RegExp.$2); // "t"

以上就是关于 JavaScript RegExp 正则表达式的详细内容,更多关于 JavaScript 基础用法的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。