JavaScript 正则表达式(RegExp)用法详解与实战指南

作者:纸飞机

时间:2026-10-29

浏览:321

本文系统整理 JavaScript 中正则表达式(RegExp)的核心用法,涵盖两种定义方式、特殊字符与量词的含义,以及 test、exec、replace 等对象方法的实际应用。重点解析动态生成正则时特殊字符的转义处理,帮助开发者掌握字符串匹配与替换的高效技巧。

文章目录

正则表达式概述与定义方式

近期在学习 JavaScript 过程中,接触到正则表达式(Regular Expression)相关知识点较为分散,特此整理成文以便总结回顾。



定义



在 JavaScript 中,创建正则表达式主要有两种途径:



1)使用构造函数:var exp1 = new RegExp("abc");



2)使用字面量语法:var exp2 = /abc/; // 注意此处无需双引号,若添加双引号则变为字符串类型



特殊字符与记忆技巧

特殊字符



其特殊字符集与 Perl 语言基本一致,可直接沿用。



\d 匹配数字字符


\w 匹配字母、数字或下划线(即单词字符)


\s 匹配空白字符(包括空格、制表符、换行符等)


\D 匹配非数字字符


\W 匹配非字母数字字符


\S 匹配非空白字符


. 匹配除换行符以外的任意字符


这里提供一种简便的记忆方式:



小写 d 代表 digit(数字),因此匹配数字



小写 w 代表 word(单词),因此匹配字母或数字



小写 s 代表 space(空格),因此匹配空白字符



所有大写字母均表示反向匹配(即不匹配原义字符)。



方括号与圆括号的匹配规则

方括号 []



在方括号内放置模式,表示只要匹配其中任意一个字符即判定为真(这与 Java 或 Perl 的行为一致)。



例如:


代码如下:

 
console.log(/[01]/.test("023424")); // true
console.log(/[01]/.test("13424")); // true
console.log(/[01]/.test("23424")); // false

圆括号()



表示必须完全符合括号内的模式才会判定为真。



例如:


代码如下:

 
console.log(/[01]/.test("013424")); // true
console.log(/[01]/.test("13424")); // false
console.log(/[01]/.test("230424")); // false
console.log(/[01]/.test("230142401")); // true

量词与正则对象方法详解

量词(Quantifiers)



与 Java 中的行为完全一致。以下表格非常实用,也是个人常用参考:



Greedy Reluctant Possessive Meaning
X? X?? X?+ X, once or not at all
X* X*? X*+ X, zero or more times
X+ X+? X++ X, one or more times
X{n} X{n}? X{n}+ X, exactly n times
X{n,} X{n,}? X{n,}+ X, at least n times
X{n,m} X{n,m}? X{n,m}+ X, at least n but not more thanm times


正则表达式对象方法



1) test:该方法接收一个字符串作为参数,返回布尔值 true 或 false,分别表示是否匹配成功。



2) exec:若未找到匹配项,返回 null;若找到匹配项,则返回一个数组,其中包含按顺序匹配的字符串信息。



3) String.replace(expression1, string1):该方法将正则表达式匹配到的部分替换为指定的字符串 string1。在 string1 中,可以使用正则表达式中定义的分组(parenthesized group)进行引用。



例如:"co-ol".replace(/[\w]+\-[\w]+/,"$2-$1"); // 结果为 "ol-co"。此功能支持引用至 $9。



4) String.replace(expression, function):这是更强大的增强版方法,允许通过自定义函数来定义输出结果。具体用法此处不再赘述,请参考相关文档。



点击打开链接



动态生成正则表达式及特殊字符转义

动态生成正则表达式


当正则表达式的内容仅在运行时才能确定时,此方法尤为适用。


生成正则表达式本质上只需构建好字符串形式的正则表达式,再通过 RegExp 构造函数即可创建。(这在文章开头已提及)。



例如:


代码如下:

 
var name = "dear"
"oh, my dear".replace(new RegExp(name), "god"); // 结果为 oh, my god

然而,如果字符串中包含特殊字符,直接上述方法可能会导致正则表达式解析错误。


因此,在这种情况下,我们需要在输入字符串的每个字符前添加反斜杠进行转义,例如:


代码如下:

 
var name = df[]vxv;
var expName = name.replace("/[^/w/s]/g","\\$&");
"my name is df[]vxv".replace(new RegExp(name), "Bob"); // 结果为 my name is Bob

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章