JavaScript RegExp 正则表达式基础用法详解

洛溪
洛溪
发布时间:2026-10-16| 6人浏览过
原创

本文详细解析 JavaScript 中 RegExp 正则表达式的创建方式及其常用方法(test、exec、match、search、replace、split)。通过实例演示元字符转义、字符类范围、预定义类以及量词的贪婪与惰性匹配机制,提供实用的字符串处理方案。

RegExp 对象与基本匹配

JavaScript 中的 RegExp 对象用于执行正则表达式匹配,其构造函数可接受一个或两个参数。第一个参数为匹配模式字符串,第二个可选参数用于指定额外的处理标志(如全局匹配 g 或不区分大小写 i)。

第1步:使用 test() 方法进行存在性测试

目的:验证目标字符串是否包含符合正则模式的子串。
入口:调用 re.test(string)。
动作:该方法返回布尔值,若字符串中有匹配项则返回 true,否则返回 false。这是最高效的“是/否”判断方式。

var sToMatch = "cat";
var reCat = /cat/; // 使用字面量语法,简洁且不易出错
alert(reCat.test(sToMatch)); // 输出 true

第2步:使用 exec() 提取首次匹配结果

目的:获取第一次匹配的具体内容及相关位置信息。
入口:调用 regAt.exec(strAAA)。
动作:返回一个数组,首个元素为匹配到的文本,同时包含 index(起始索引)和 lastIndex(结束位置)属性。通常需配合循环使用以获取所有匹配。

var strAAA = "a bat, a Cat, a fAt baT, a faT cat";
var regAt = new RegExp("at", "gi"); // gi表示全局且忽略大小写
var arr = regAt.exec(strAAA); 
// arr[0] 为 "at",arr.index 值为 3

第3步:使用 match() 批量获取所有匹配

目的:一次性返回字符串中所有符合模式的匹配项列表。
入口:调用 string.match(regExp)。
注意:与 RegExp.exec() 相反,String.match() 是以字符串为主体发起的请求。

var strAAA = "a bat, a Cat, a fAt baT, a faT cat";
var regAt = new RegExp("at", "gi");
var arrMatch = strAAA.match(regAt); // 返回包含所有匹配 "at" 的数组

第4步:使用 search() 查找首次出现的位置

目的:定位模式在字符串中首次出现的索引位置,类似 indexOf() 但支持正则。
入口:调用 string.search(regExp)。
结果:成功时返回数字索引,失败时返回 -1。

var index = strAAA.search(regAt); // 输出 3,即 "at" 首次出现的起始位置

字符串方法的进阶应用

原生 String 对象的方法也深度集成了正则表达式能力,常用于替换和分割操作。

第5步:使用 replace() 进行智能替换

目的:根据正则模式找出并替换匹配的子串。
入口:调用 string.replace(regex, replacement)。
进阶:第二个参数可以是函数,用于基于匹配内容进行动态转换。

// 基础替换:将所有的 's' (不分大小写) 替换为 ##
var strBBB = "The Sky is red.";
var strNewBBB = strBBB.replace(/s/gi, "##"); 

// 函数式替换:将匹配到的 'red' 替换为 'blue'
var sToChange = "The sky is red.";
var sResultText = sToChange.replace(/red/, function(match) {
    return "blue";
});
// 输出: The sky is blue.

第6步:使用 split() 按规则切割字符串

目的:利用正则作为分隔符将字符串拆分为数组。
注意:当分隔符本身具有特殊含义(如逗号在某些上下文可能被视为占位符)时,可能需要转义,但在标准的 split 行为中直接传入正则即可。

var sColor = "red,blue,yellow,green";
var reComma = /,/; // 如果作为正则对象构造,特殊字符需注意转义
var arrColors = sColor.split(reComma); 
// arrColors 长度为 4

构建高效的正则模式

掌握元字符、预定义类和量词是编写灵活正则的关键。

元字符的处理

特殊符号包括:( [ { \ ^ $ | ) ? * + .。若在文本中需要匹配这些符号本身,必须使用反斜杠进行转义。建议使用字面量语法/pattern/而非 new RegExp() 字符串写法,避免双重转义带来的混淆。

字符类的组合策略

方括号 [] 内定义的集合提供了强大的筛选能力:

  • 简单类:列出具体字符,如 [bcf]at 匹配 bat, cat, fat。
  • 负向类:使用脱字符 ^ 表示排除,如 [^bc]at 匹配不以 b 或 c 开头的 at。
  • 范围类:使用中划线 - 指定区间,如 [1-4] 匹配数字 1 至 4。
  • 预定义类:简写形式极大提升可读性。
    • .: 除换行符外的任意字符。
    • \d: 等价于 [0-9],匹配数字。
    • \w: 等价于 [a-zA-Z_0-9],匹配单词字符。
    • \s: 匹配空白字符(空格、制表符、换行等)。

量词控制重复次数

量词决定了模式匹配的频次。理解贪婪与惰性的区别至关重要:

  • 贪婪量词(默认):如 *, +。尽可能多地匹配字符。例如 /.*bbb/ 会从第一个字符一直匹配到最后一个 bbb。
  • 惰性量词:在后缀加 ?(如 *?, +?)。尽可能少地匹配字符,一旦发现满足条件的模式即刻停止。例如 /.*?bbb/ 会尽快找到第一个 bbb。
var str = "abbbaabbbaaabbb";
// 贪婪模式:从开头一直取,直到最后才停止,只输出最长的一段
var regGreed = /.*bbb/;
// 惰性模式:遇到第一个 bbb 就停下
var regLazy = /.*?bbb/;

以上就是 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 算法库。