正则表达式最常用的几种情形

正则表达式提供了一种字符串匹配模式的描述形式,通过简单的符号就能表达丰富的文本结构。如 [a-z]+ 就可以表示所有字母的组合。

以下是在实际项目中使用得最多的三种情形。

1 判断

如判断用户的输入是否符合要求。通常使用正则表达式的 test 方法,当传入的字符串符合正则表达式的模式要求时会返回 true。

如仅允许输入数字,可用以下方法检测:

function checkNum(inputStr){
	return /^\d+$/.test(inputStr);
}

其中正则表达式 ^\d+$ 中,第一个符号 ^ 表示字符串首,最后的 $ 表示字符串尾,加上这两个表示必须整串字符完全跟模式匹配才返回 true。而如果没有,则只要字符串中包含符合模式的串就会返回 true。

2 寻找

在文本中寻找指定形式的匹配串,如手机号、邮箱等。在 javascript 中,通常可以使用字符串对象的 match 方法。此时,正则表达式作为 match 方法的参数传入。

如,找出文本中所有的数字串:

function findNum(inputStr){
	return inputStr.match(/\d+/g);
}

// 调用示例
console.log( findNum("a123abb90,78a909").join() );

上边调用示例会输出匹配的数组数据:123,90,78,909
正则表达式 \d+ 表示数字串,而表达式对象 /\d+/ 外的 g 是一个选项,表示全局搜索,表明要找出所有的匹配项。如果没有这个 g,则只会返回第 1 个匹配结果。

此外,也可以使用正则表达式的 exec 方法,匹配第 1 个符合模式的字符串。如 /\d+/.exec("a123abb90,78a909") 得到 123

当然,如果文本中不包括匹配的内容则会返回 null。

3 替换

将文本中符合指定模式的匹配串替换成别的字符串,使用字符串的 replace 方法。如,将上边示例字符串中的非数字部分替换成逗号,这种情形在对用户输入时去除干扰性输入时经常用到。

function replaceNotNum(inputStr){
	return inputStr.replace(/[^\d]+/g, ",");
}

// 调用示例
console.log( replaceNotNum("a123abb90,78a909") );

上边调用示例会输出结果:,123,90,78,909
同样,正则表达式后边的 g 表示全局,如果没有它,则只会替换掉第 1 个匹配的字符串。

有一种情形是替换时经常碰到的:对匹配的内容不是替换成另一个相同的字符串,而是在匹配的基础上进行调整。如将上边示例字符串中的连续数字统一加上中括号。此时可以:

function decorateNum(inputStr){
	return inputStr.replace(/(\d+)/g, '[$1]');
}

// 调用示例
console.log( decorateNum('a123abb90,78a909') );

上边调用示例会输出结果:a[123]abb[90],[78]a[909]
正则表达式 ([\d]+) 加了括号,而替换的字符串中出现了一个$1,这是关键。因为替换的内容跟匹配的内容需要动态关联,需要一种关联机制。这种机制就是,括号中的内容作为子匹配会进行存储,以供后续使用,一共支持 $1 ~ $9 共 9 个存储值,这里再举一个例子。

function exchangeNum(inputStr){
	return inputStr.replace(/(\d)(\d)/g, '$2$1');
}

猜猜以下调用会输出什么结果:

console.log( exchangeNum('12 34 56 78') );

4 语法文档

至于想要匹配的内容如何书写正则表达式,这与需求相关,可以在面临实际问题时去翻阅语法说明或其它方式寻求答案。

参考文档:https://www.runoob.com/regexp/regexp-tutorial.html

posted @   三人行工作室  阅读(681)  评论(0编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
点击右上角即可分享
微信分享提示