本文系统梳理了 JavaScript 中正则表达式的核心使用方法与常用规则。详细解析了 RegExp 对象的 test 与 exec 方法差异,涵盖 \d、^、$ 等元字符及 *、+、{n,m} 等限定符。通过实际代码案例,演示了如何编写邮箱、手机号校验及高复杂度密码强度验证的正则表达式,帮助开发者快速掌握正则应用技巧。
1、常用的方法
RegExp:用于定义正则表达式字面量。常见的定义方式包括使用 new RegExp() 构造函数,或者直接通过 // 字面量形式进行定义。
test:用于执行正则表达式的匹配测试。该方法返回布尔值,若匹配成功则返回 true,匹配失败则返回 false。
exec:用于获取正则匹配的片段,返回值是一个数组。数组的第一个索引包含匹配的字符串内容;若未匹配到结果,则返回 null。需要注意的是,exec 方法默认只捕获第一个匹配到的字符串。若要获取所有匹配项,必须在正则字面量中添加全局标识符 g。添加后,连续调用 exec 会按顺序依次捕获后续相同的内容。
在使用限定符 {n,m} 时,exec 默认会捕获最大长度的匹配字符串。例如,使用 \d{1,3} 进行匹配时,会返回尽可能长的数字序列。如果希望获取最小长度的匹配结果,可以在限定符后添加问号 ?,例如 \d{1,3}?。具体实现效果可参考后续代码案例。
注意:正则表达式主要用于字符串匹配,因此原字符中的内容仅代表值本身,与数字的数据类型无关。
2、元字符
- \d:匹配一位数字字符。
- \D:匹配一位非数字字符。
- \s:匹配一位空白字符,主要包含换行符 (\n)、制表符 (\t) 以及空格。
- \S:匹配一位非空白字符。
- \w:匹配一位包含字母、数字或下划线的字符。
- \W:匹配一位不包含字母、数字或下划线的字符。
- .:匹配除换行符以外的任意单个字符。
3、边界符
- ^:表示字符串必须以指定的 xx 字符串开头。
- $:表示字符串必须以指定的 xx 字符串结尾。
注意:当 ^ 和 $ 同时使用时,表示字符串必须同时满足开头和结尾的条件,即两种限制条件共同生效。
4、限定符
- *:通用量词,表示匹配 0 到多次。适用于所有类型的字符串。
- +:表示匹配 1 到多次,即字符串至少需要出现一次。
- ?:表示匹配 0 到 1 次。当字符串出现一次时匹配成功,不出现时也视为匹配(返回 true);若语境要求必须存在,则不出现时返回 false。
- {n}:表示字符连续精确出现 n 次。
- {n,}:表示字符连续出现至少 n 次(即 >= n 次)。
- {n,m}:表示字符连续出现次数在 n 到 m 之间(即 >= n 且 <= m 次)。
5、特殊符
- ():将元字符或一组规则作为一个整体处理,常用于组合多种匹配方式。
- |:表示“或”的关系,字面量中的规则只需满足其中一个匹配条件即可。
- []:表示匹配中括号内的任意一位字符。例如 [12345689],只要字符包含其中一位即符合条件。也常用于范围表示,如 0-9、a-z、A-Z。
6、常用表达式
以下是常用的正则表达式规则,包括一些高频使用的表达式模板,开发者可以直接复制粘贴使用:
邮箱地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
网址:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
国内手机号:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
国内电话号:^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
身份证号(15位、18位数字):^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$7、收获总结
在回顾正则元字符的过程中,理解表达式规则的逻辑顺序至关重要:首先定义包含的字符格式,其次限定字符串长度,接着确定是否有边界限制(如以 xx 开头、以 xx 结尾),最后执行匹配操作。按照这一顺序来理解和构建正则表达式,可以大幅降低学习难度。
8、代码案例
const initData3 = ()=>{
let reg = /\d{1,3}/
let reg2 = /\d{1,3}?/
let str = "now is 1233434"
let str2 = "now is 12"
let a = reg.exec(str)
let b = reg.exec(str2)
let c = reg2.exec(str)
let d = reg2.exec(str2)
console.log('最大1',a)
console.log('最大2',b)
console.log('最小1',c)
console.log('最小2',d)
}附:校验密码强度
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$- (?=…) 是正向肯定预查(Positive Lookahead)的语法,表示在当前位置向后查找,判断是否匹配括号内的表达式。
- .:匹配除换行符外的任意一个字符。
- .* 表示匹配任意数量的字符(除换行符外)。
- (?=.*\d) 表达式的含义是:在当前位置向后查找,如果存在至少一个数字,则匹配成功。这里的当前位置通常位于匹配的起始位置(^)之后。
- (?=.*[a-z]) 表示使用正向肯定预查来匹配至少一个小写字母。当前位置位于匹配的起始位置(^)之后。
- (?=.*[A-Z]) 表示使用正向肯定预查来匹配至少一个大写字母。当前位置位于匹配的起始位置(^)之后。
综合上述规则,该表达式要求包含大小写字母和数字的组合,禁止使用特殊字符,且字符串长度限制在 8 到 10 位之间。
总结
到此这篇关于 js 正则表达式常用方法的文章就介绍到这了,更多相关 js 正则表达式常用方法内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!