本文详细解析 JavaScript 中 RegExp 对象的用法,涵盖基本模式定义、i/g 修饰符、元字符与方括号规则、量词机制及边界匹配。通过手机号、身份证等实战案例,演示 test、match、search 等核心方法的实际应用,帮助开发者掌握正则在字符串验证与提取中的技巧。
RegExp 基本用法与模式定义
在检索文本内容时,通常需要依据特定模式来描述目标内容,而 RegExp 正是用于定义这种模式的对象。
最简单的模式仅包含单个字符。
更复杂的模式则包含更多字符,可用于解析文本、进行格式检查或执行替换操作。
开发者可以规定在字符串中检索的具体位置,以及需要匹配的字符类型等细节。
1.基本用法
修饰符:大小写与全局匹配
<script>
// 创建正则
var reg = /hello/
// 检测某个字符串是否有符合正则格式的文本
var flag = reg.test("hello world")
console.log(flag) // true
</script>
2.修饰符
修饰符主要用于控制是否区分大小写以及是否进行全局匹配。
i:表示不区分大小写。
g:表示执行全局匹配。
<script>
// 默认会区分大小写
var reg = /hello/
var flag = reg.test("Hello World")
console.log(flag) // false
// 添加i修饰符 不区分大小写
var reg2 = /hello/i
var flag2 = reg2.test("Hello World")
console.log(flag2) // true
var str = "I'm in a bad mood, really bad"
// 默认非全局匹配
var reg3 = /bad/
var newStr = str.replace(reg3,"good")
// 只替换了一个bad
console.log(newStr) // I'm in a good mood, really bad
// 全局匹配
var reg4 = /bad/g
var newStr2 = str.replace(reg4,"good")
// 替换了全局的bad为good
console.log(newStr2) // I'm in a good mood, really good
// 同时使用
var reg5 = /bad/gi
</script>
元字符与方括号规则
3.元字符
元字符是指具有特殊含义的字符:
.:用于查找单个任意字符,但不包括换行符和行结束符。
- \d:用于匹配数字 0-9。
- \D:用于匹配非数字字符。
- \s:用于匹配任意空白字符,不限于空格。
- \S:用于匹配非空白字符。
- \w:用于查找单词字符,包括 a-z、A-Z、0-9 以及下划线。
- \W:用于查找非单词字符。
4.方括号
方括号用于指定匹配某个范围内的字符:
- [abc]:匹配方括号内存在的任意一个字符(即 a、b 或 c)。
- [^abc]:匹配方括号内不存在的字符(即除了 a、b、c 以外的字符)。
- [0-9]:查找任何从 0 到 9 的数字。
- [a-z]:查找任何从小写 a 到小写 z 的字符。
- [A-Z]:查找任何从大写 A 到大写 Z 的字符。
- [A-z]:查找任何从大写 A 到小写 z 的字符。
量词与贪婪模式
5.量词
- \d{6}:匹配恰好 6 个数字。
- \d{4,6}:匹配 4 到 6 个数字。
- \d{4,}:匹配至少 4 个数字。
- ?:表示匹配 0 次或 1 次,超过 1 次则不匹配。
- +:表示至少匹配 1 次。
- *:表示匹配 0 次或多次。
.*:尽可能匹配更长的字符(贪婪模式)。
.*?:尽可能匹配更短的字符(非贪婪模式)。
\d{4,6}:尽可能匹配更长的字符(贪婪模式)。
\d{4,6}?:尽可能匹配更短的字符(非贪婪模式)。
边界匹配与实战案例
6.边界匹配
^n:匹配任何以 n 开头的字符串。
n$:匹配任何以 n 结尾的字符串。
7.实例
匹配手机号
var reg = /^1\d{10}$/;
匹配QQ号
var reg = /^[1-9]\d{4,10}$/;
匹配身份证号
var reg = /^[1-9]\d{16}[Xx\d]$/;
变量名检测(只能由字母、数字、下划线组成,且不能以数字开头,长度 6-15)
var reg = /^[A-z_]\w{5,14}$/;
正则相关方法详解
8.相关方法
test():检测正则表达式是否能在指定字符串中查找到匹配的文本。
<script>
var str = "hi66morning77"
// 匹配连续的3个数字
var reg = /\d{3}/
console.log(reg.test(str)) // false
// 匹配连续的7个小写字母
var reg2 = /[a-z]{7}/
console.log(reg2.test(str)) // true
</script>
match():查找符合正则表达式规则的文本,以数组形式返回。若未指定全局匹配,则只查找一次;若无匹配结果则返回 null。
<script>
var str = "hi66morning77"
// 匹配连续的2个数字 非全局匹配
var reg = /\d{2}/
console.log(str.match(reg)[0]) // 66
// 匹配连续的2个数字 全局匹配(推荐)
var reg2 = /\d{2}/g
console.log(str.match(reg2)) // ["66", "77"]
</script>
search():返回目标字符串中第一次出现匹配项的索引值(注意:全局匹配在此方法中被忽略)。
<script>
var str = "hi66morning77"
// 匹配连续的2个数字 非全局匹配
var reg = /\d{2}/
console.log(str.search(reg)) // 2
// 匹配a,b,m中的一个
var reg2 = /[abm]/
console.log(str.search(reg2)) // 4
</script>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。