JavaScript 正则如何匹配
早上帮同事改表单验证时,突然想起很多新手朋友学JavaScript时,总卡在“正则怎么用”——明明搜了教程,复制了代码,换个场景就报错。其实正则不是编程难题,只是需要把“找东西的规则”拆成生活里的小事,今天就用日常例子讲明白,JavaScript里的正则匹配到底是怎么回事。
先搞懂:正则是“给字符串定规则”
咱们平时找东西,比如在一堆零食里找“带坚果的饼干”,是在心里有个规则:① 属于饼干类;② 包含坚果。正则其实就是把这个“规则”写给JavaScript看,让它帮你自动找符合要求的内容。

举个最简单的例子:你想从“我买了苹果和香蕉”里找出水果,水果的规则是“以中文开头,后面跟一个果字”。写成正则的话,核心就是/^[\u4e00-\u9fa5]+$/?不对,新手不用记代码符号的名字,只要记住:正则是用//包起来的“规则代码”,比如要找“数字”,就写/\d/,要找“任意字母”就写/[a-zA-Z]/,和生活里“数1、2、3是数字”一模一样。
核心步骤:3步完成JavaScript正则匹配
用正则在JS里干活,其实就是“定规则→找匹配→处理结果”,每一步都有对应的JS方法,用生活例子对应就好懂:
**先拿你要找的东西,定好规则**
比如你要验证用户输入的手机号,规则是“1开头,第二位是3-9的数字,后面跟9个数字”,翻译成正则就是/^1[3-9]\d{9}$/,这里的^和$是“别多找”的意思——比如你要找“整串都是手机号”,就不能有其他字符,像138xxxx这样有多余符号的就不算,加^和$就能限定“从开头到结尾全符合规则”,这就像你找“完整的苹果”,不能是咬过的半块。
**用JS方法,让它帮你找匹配**
JS里常用的两个方法,对应两种需求:
- 要是“找有没有符合规则的内容”,就用
test():比如判断用户输入的是不是手机号,写const isPhone = /^1[3-9]\d{9}$/.test('13800138000');,返回true就是符合,false就是不符合,这就像你扫一眼零食袋,有没有“带坚果的饼干”,有就点头,没有就摇头。 - 要是“找出所有符合规则的内容”,就用
match():比如从“苹果12元,香蕉5元,橘子8元”里找出所有价格,规则是“数字开头,后面跟可能的小数”,写const prices = '苹果12元,香蕉5元,橘子8元'.match(/\d+(\.\d+)?/g);,返回的就是['12','5','8'],这就像你把所有带价格的标签都挑出来,不用一个个数。
**处理结果,按需求用数据**
找到匹配的内容后,就可以用了:比如验证不通过就弹提示,找到价格就算总金额——比如刚才的价格,把每个转成数字加起来,就是12+5+8=25元,这就像你把挑出来的饼干都放进购物车,准备结账。
新手避坑:别踩这2个常见小错误
我刚学的时候也踩过坑,都是日常场景里的小问题,记好就不容易错:
第一个坑:加g还是不加?g是“全局匹配”的意思,不加的话,match()只会返回第一个符合的内容,比如刚才找价格,不加g就只会返回['12'],必须加g才会找全,这就像你只挑了第一个带价格的标签,没把所有的都挑出来。
第二个坑:中文匹配的小细节。要是你想找中文,别直接写/中文/,最好用/^[\u4e00-\u9fa5]+$/,因为有些特殊的中文符号(比如全角的逗号、句号),新手容易忽略,这个规则能保证找的是纯中文,就像你要找“汉字”,不会把全角标点算进去。
其实JavaScript正则匹配,本质就是“把你的需求翻译成规则,让计算机帮你批量找东西”,不用怕记复杂符号,先从验证手机号、找邮箱这种日常场景练,慢慢就会顺手。