JavaScript 正则表达式常用方法与语法详解

作者:异步漫步时间:2026-10-29 20:55:51浏览:409

本文系统介绍 JavaScript 中正则表达式的核心用法,涵盖 RegExp 对象的 test 与 exec 方法区别,以及字符串处理中的 search、match、replace 和 split 方法。同时详细解析字符集、边界匹配、量词等常见正则语法,并提供汉字、手机号、邮箱等实用匹配示例,帮助开发者高效进行文本模式匹配与处理。

JavaScript 正则表达式基础

本文直接切入主题,旨在帮助读者掌握 JavaScript 中正则表达式的具体应用技巧。

基础定义与使用规范


var patt1 = new RegExp("hello"); 
var patt2 = /world/ ; 

RegExp 对象方法:test 与 exec

test 方法详解

test() 函数用于检测字符串中是否包含指定的正则模式。该方法返回布尔值:若找到匹配项则返回 true,否则返回 false。


var pat = /my/; 
var str = "this is my code..."; 
console.log(pat.test(str)); // true 

exec 方法详解

exec() 函数用于检索字符串中与正则表达式匹配的值。若找到匹配,则返回包含匹配信息的数组;若未找到匹配项,则返回 null。


var pat = /hello/; 
console.log(pat.exec("oh hello world")); //返还hello 

正则表达式语法结构

正则表达式语法结构

正则表达式的标准写法为 /pattern/attributes。其中 pattern 代表匹配模式,attributes 为可选的标志字符串,常用的有 'g'(全局匹配)和 'i'(忽略大小写)。


var str = "Visit Hunger"; 
var patt1 = /hunger/i; //不区分大小写 
console.log(str.match(patt1)); //全局匹配 
var str="hello hunger valley! I am hunger"; 
var patt1=/hunger/g; 
console.log(str.match(patt1)); //不区分大小写,全局匹配 
var str="hello Hunger valley! I am hunger"; 
var patt1=/hunger/gi; 
console.log(str.match(patt1)); 

字符串处理中的正则应用

字符串与正则的交互方法

1. search 方法

用于在字符串中搜索与正则表达式匹配的子串,并返回第一个匹配项的起始索引位置。


var str="Visit W3School!"; 
console.log(str.search(/w3school/)); //-1 console.log(str.serach(/w3school/i)); // 6 

2. match 方法

用于查找字符串中与正则表达式匹配的所有子串。若未指定全局标志 'g',则返回第一个匹配项及其捕获组;若指定 'g',则返回所有匹配项的数组。


var str="1 plus 2 equal 33"; 
console.log(str.match(/\d+/)); //[1] 
console.log(str.match(/\d+/g)); //[1,2,33] 

3. replace 方法

用于将字符串中与正则表达式匹配的部分替换为指定的新字符串,并返回替换后的新字符串。


var str="Hello JI! oh I am hunger" 
console.log(str.replace(/Hunger/, "valley")); console.log(str.replace(/hunger/ig, "hunger")); 

4. split 方法

用于根据正则表达式定义的规则将字符串分割为子字符串数组。


var str = "Hello Hunger , oh I am Hunger"; 
str.split("");
str.split(/\s+/); 

常用正则语法符号解析

常用正则语法符号

字符集匹配:[abc] 用于匹配方括号内包含的任意单个字符。


var str="Is this all there is?"; 
var patt1=/[a-h]/g;
console.log(str.match(patt1)); 

否定字符集:[^abc] 用于匹配不在方括号内的任意单个字符。


var str="hello jikexueyuan!"; 
var patt1=/[^jike]/g; 
console.log(str.match(patt1)); 

范围匹配:[0-9] 用于匹配从 0 到 9 之间的任意数字字符。

小写字母范围:[a-z] 用于匹配从 a 到 z 的小写英文字母。

大写字母范围:[A-Z] 用于匹配从 A 到 Z 的大写英文字母。

大小写混合范围:[A-z] 用于匹配从 A 到 z 之间的所有字符(包含部分特殊符号)。

集合匹配:[adgk] 用于匹配给定集合 {a, d, g, k} 中的任意一个字符。

否定集合:[^adgk] 用于匹配不在给定集合 {a, d, g, k} 中的任意字符。

多选分支:red|blue|green 用于匹配指定的多个选项中的任意一个。


var str="hello hunger! How are you?"; 
var patt1=/hello|you/g; c
onsole.log(str.match(patt1)); 

通配符:. 用于匹配除换行符和行结束符之外的任意单个字符。


var str="That's hot!"; 
var patt1=/h.t/g; 
document.write(str.match(patt1)); 

单词字符:\w 用于匹配字母、数字、下划线组成的单词字符。


var str="Give 100%!"; 
var patt1=/\w/g; 
document.write(str.match(patt1));

非单词字符:\W 用于匹配非单词字符(即非字母、数字、下划线)。


var str="Give 100%!"; var patt1=/\W/g; document.write(str.match(patt1)); 

数字匹配:\d 用于匹配任意阿拉伯数字。


var str="Give 100%!"; 
var patt1=/\d/g; 
document.write(str.match(patt1)); 

非数字匹配:\D 用于匹配非数字字符。


var str="Give 100%!"; var patt1=/\D/g; document.write(str.match(patt1)); 

空白字符:\s 用于匹配空格、制表符、换行符、回车符等空白字符。


var str="Is this all there is?";
var patt1=/\s/g; document.write(str.match(patt1)); 

非空白字符:\S 用于匹配非空白字符。


var str="Is this all there is?"; var patt1=/\S/g; document.write(str.match(patt1)); 

单词边界:\b 用于匹配单词边界,即单词字符与非单词字符之间的位置。

边界匹配示例:/\bm/ 可匹配 'moon' 中的 'm';/oo\b/ 不匹配 'moon' 中的 'oo',因为其后紧跟单词字符 'n';/oon\b/ 可匹配 'moon' 中的 'oon',因其位于字符串末尾。


var str="Hello jikexueyuan"; 
var patt1=/\bjikexueyuan/g; 
document.write(str.match(patt1)); 

非单词边界:\B 用于匹配非单词边界的位置。

换行符:\n 用于匹配换行符。


var str="Hello Hunger.\n be a FE."; 
var patt1=/\n/g; document.write(str.search(patt1)); 

量词加号:n+ 用于匹配包含至少一个 n 的字符串序列。


var str="Hello HHunger! Hello World!"; 
var patt1=/H+/g; 
document.write(str.match(patt1)); 
var str="Hello Hunger! Hello World!"; 
var patt1=/\w+/g; document.write(str.match(patt1)); 

量词星号:n* 用于匹配包含零个或多个 n 的字符串序列。


var str="Hellooo Hunger! Hello World!"; var patt1=/lo*/g; document.write(str.match(patt1)) 

量词问号:n? 用于匹配包含零个或一个 n 的字符串序列。


var str="1, 100 or 1000?"; var patt1=/10?/g; document.write(str.match(patt1)); 

精确重复:n{X} 用于匹配恰好包含 X 个 n 的序列。


var str="100, 1000 or 10000?"; var patt1=/\d{4}/g; document.write(str.match(patt1)); 

范围重复:n{X,Y} 用于匹配包含 X 到 Y 个 n 的序列。


var str="100, 1000 or 10000?"; var patt1=/\d{3,4}/g; document.write(str.match(patt1)); 

最小重复:n{X,} 用于匹配包含至少 X 个 n 的序列。


var str="100, 1000 or 10000?"; var patt1=/\d{3,}/g; document.write(str.match(patt1)); 

结尾锚点:n$ 用于匹配以 n 结尾的字符串。


var str="Is this his"; var patt1=/is$/g; document.write(str.match(patt1)); 

开头锚点:^n 用于匹配以 n 开头的字符串。


var str="Is this his"; var patt1=/^Is/g; document.write(str.match(patt1)); 

常见正则匹配场景示例

常见应用场景示例

常用正则模式:汉字匹配使用 [\u4e00-\u9fa5];手机号匹配使用 1[0-9]{10};邮箱匹配使用 (\S)+[@]{1}(\S)+[.]{1}(\w)+

作者最新文章