JavaScript 正则表达式基础语法、常用方法与实战应用
本文系统介绍 JavaScript 中正则表达式的两种定义方式、核心标志位含义及 test、match、replace 等常用方法。通过断言、字符类、量词等实战案例,解析单词边界、范围匹配及数字区间验证的具体用法,帮助开发者掌握正则在字符串处理中的实际应用。
在实际开发工作中,JavaScript 正则表达式的应用频率较高,因此掌握这部分知识至关重要。
一、基础语法:
第一种方式采用字面量语法。
var expression=/pattern/flags;
第二种方式通过 RegExp 构造函数创建正则对象。
var pattern = /\w/gi; //字面量语法
var pattern = new RegExp('\\w', 'gi');//构造函数语法,这两者是等价的
需要注意的是,当正则表达式的内容需要动态生成时,必须选择第二种构造函数语法。
RegExp 构造函数中支持的 flags 参数包含三个主要标志。
g:代表全局模式,意味着正则表达式将应用于整个字符串,而不是在找到第一个匹配项后立即停止。
i:代表忽略大小写模式,即在匹配过程中不区分字符串的大小写。
m:代表多行模式,允许在到达当前行末尾后继续查找下一行中是否存在匹配项。
此外还存在其他 flags,但由于使用频率极低,此处不再赘述。
关于上述示例中 的具体含义,请继续阅读后续内容。
二、方法
主要涉及 test()、search()、match() 和 replace() 四个方法。虽然存在其他方法,但因使用场景较少,此处不作展开。
1、test() 方法的使用
用于判断指定字符串中是否包含符合正则条件的子串。
2、search() 方法的使用
用于搜索符合正则条件的字符串第一次出现的索引位置;若未找到匹配项,则返回 -1。
3、match() 方法的使用
用于返回所有匹配结果的数组。
4、replace() 方法的使用,该功能在实际应用中非常广泛。
用于匹配符合正则条件的字符串,并将其替换为指定的新字符串。
三、匹配表达式跟实战
1、断言:
断言用于指定匹配发生的特定条件。概念较为抽象,以下通过具体示例进行说明。
| 字符 | 描述 |
|---|---|
| ^ | 匹配开头 |
| $ | 匹配结尾 |
| \b | 匹配单词的边界 |
| \B | 匹配非单词的边界 |
举例说明。
假设需要匹配一个字符串,要求其内容从头到尾均为 'dog',且忽略大小写。
var pattern = /^dog$/i;//忽略大小写
console.log(pattern.test('dog'));//true
console.log(pattern.test('sdfdog'));//false
console.log(pattern.test('dog56'));//false
console.log(pattern.test('dOG'));//true
var pattern = /\b\w+/g;//全局匹配,这里的+,是量词,代表1次或者多次
console.log('Hello World'.match(pattern));//输出['Hello','World'],这里就是match用法,返回匹配的数组。
在此说明, 用于匹配单词边界,而 则匹配非单词边界。两者通过大小写区分正负,无需过多解释。
另外,许多开发者对单词边界的概念尚不清晰。
简要解释如下:以 'Hello World' 为例,其单词边界共有四个,分别位于 H、o、W、d 的位置。
2、字符类:
| 元字符 | 描述 |
|---|---|
| . | 查找单个字符,除了换行和行结束符 |
| \w | 查找单词字符,相当于[A-Za-z0-9_] |
| \W | 查找非单词字符,相当于[^A-Za-z0-9_] |
| 下面的反义便不再罗列出来了。 | |
| \d | 查找数字,相当于[0-9] |
| \s | 查找空白字符 |
| \0 | 查找NULL字符 |
| \n | 查找换行符 |
| \f | 查找换页符 |
| \r | 查找回车符 |
| \t | 查找制表符 |
| \v | 查找垂直制表符 |
3、范围:
| 字符 | 描述 |
|---|---|
| [abc] | 匹配a,b,c中的任意一个字符 |
| [^abc] | 匹配不是a,b,c中的任意一个字符 |
| [0-9] | 匹配0-9任意范围的数字,同理[a-z]匹配a-z任意范围的字符 |
| [a-z] | 匹配a到z之间的任意一个字符 |
| x|y | 匹配x或者y |
4、量词:
| 字符 | 描述 |
|---|---|
| n+ | 匹配任何包含至少一个字符n的字符串 |
| n* | 匹配任何包含零个或多个n的字符串 |
| n? | 匹配任何包含零个或者一个n的字符串 |
| n{x} | 匹配包含x个n的字符串 |
| n{x,y} | 匹配最少x个,最多y个n的字符串 |
四、拓展
匹配 10-36 之间的数字。
var pattern = /1[2-9]|[2-3][0-9]|4[0-6]/;//12-46
console.log(pattern.test(11));//false
console.log(pattern.test(12));//true
console.log(pattern.test(20));//true
console.log(pattern.test(36));//true
console.log(pattern.test(46));//true
console.log(pattern.test(47));//false
将 'Hello,World!Hello' 中的 'Hello' 替换为 'Welcome'。
此处重点强调 replace 方法在正则中的应用,因其实际使用频率极高。flags 中的 g 标志加上与否会产生显著差异。
var pattern = /Hello/g;
var oldString = 'Hello,World!Hello';
var newString = oldString.replace(pattern, 'Welcome');
console.log(newString);//Welcome,World!Welcome
总结
本文介绍了 JavaScript 中正则表达式的实际应用。如需了解更多相关内容,建议搜索本站过往文章或继续阅读后续系列文章,感谢支持。
什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
p5.js 中 setup() 和 draw() 函数的执行机制详解
2026-11-05 12:32:38
