RegularExpression,简称RegExp
规则表达式:用来检测字符串是否符合规则
书写方式:由一些特殊符号按照指定语法书写
语法:双斜杠 / ??? /标识符
const reg1 = /abc/;
console.log(reg1.test("abc123")) // true
console.log(reg1.test("a12")) // false
语法:new RegExp("???","标识符")
const reg2 = new RegExp("abc");
console.log(reg2.test("abc123"));// true
console.log(reg2.test("a12"));// false
使用基础元字符,可以指定一些简单的规则
const reg = /\s/ // 匹配空格
const reg = new RegExp("\\w") //匹配字母数字下划线(\w输出是w,\\w输出才是\w)
限制字符串的开始和结束
const reg1 = /^\d\d/ // 开头是两个数字
const reg2 = /\d\d\d$/ // 结尾是三个数字
const reg3 = /^\d\d\d$/ // 只有三个数字
没有精确匹配的情况下,出现多次也满足规则。
限定符一般配合基础元字符使用
// 用户名/密码 :只能包含字母数字下划线,6-12个字符
const reg = /^\w{6,12}$/;
[0-9]
,[a-zA-Z]
// 1. 只能由1或8或7开头
const reg = /^[187]/
// 2. 长度是6-12个字符,不能以数字开头
const reg = /^[^\d].{5,11}$/
const reg = /^\D.{5,11}$/
// 4. 匹配姓名(2-4个汉字)
// 汉字的编码范围:4E00-9FA5
const reg = /^[\u4E00-\u9FA5]{2,4}$/
// 5. 匹配a或者b开头
const reg = /^[ab]/
const reg = /^(a|b)/
// 6. 字符串开始有空格或者末尾有空格
const reg = /^(\s+)|(\s+)$/
i 表示忽略大小写
/\d/i
new RegExp('\\d','i')
m 表示多行匹配
(每一行的开头和结尾都算)
/\d/m
new RegExp('\\d','m')
g 表示全局匹配(常用)
匹配所有符合条件的
/\d/g
new RegExp('\\d','g')
// 1. 字符串中有abc,不区分大小写
const reg = /abc/i
const str = "abc123" // true
const str2 = "aBc" // true
const str3 = "abbbc" // false
// 2. 字符串以w开头,多行匹配
const reg = /^w/m
const str = 'hello\nworld'
console.log(reg.test(str)) // true
检测字符串是否符合正则的规则
语法:正则.test(字符串)
返回值:boolean 表示字符串是否符合正则
将字符串中符合正则的内容捕获出来
语法:正则.exec(字符串)
返回值:将字符串中符合正则要求的第一项以及一些其他信息(groups,index,input),以数组形式返回
const reg = /\d+/
const str = "af5234sfw3456s24s22tc32"
console.log(reg.exec(str));//['5234']
const reg2 = /\d+/g //全局匹配
console.log(reg2.exec(str));//['5234']
console.log(reg2.exec(str));//['3456']
console.log(reg2.exec(str));//['24']
...
// 如果匹配完成,没有更多了,则返回null
查找字符串中是否有满足正则的内容
语法:字符串.search(正则)
返回值:匹配到返回开始索引,没有返回-1
是否全局匹配不影响结果,永远返回第一个符合的索引
const reg = /\d{3}/
const str = "hello123world32s"
console.log(str.search(reg));//5
捕获字符串中符合正则的内容并返回
语法:字符串.match(正则)
返回值:
const reg = /\d{3}/
const str = "hello123world132s"
console.log(str.match(reg));//123
const reg2 = /\d{3}/g // 全局匹配
console.log(str.match(reg2));//['123','132']
将字符串中符合正则条件的字符串替换掉
语法:字符串.replace(正则,要替换的字符串)
返回值:替换后的字符串
const reg = /\d{3}/ // 首个替换
const str = "hello123world132s"
console.log(str.replace(reg,'AAA'))//helloAAAworld132s
const reg2 = /\d{3}/g // 全局替换
console.log(str.replace(reg2,'AAA'))//helloAAAworldAAAs
// 需求:使用正则,去除字符串的前后空格
// 找到前后空格,替换为空字符串
let str = " hello world "
const reg = /(^\s+)|(\s+$)/g
str = str.replace(reg,"")
console.log(str)
当正则表达式中包含重复的限定符时,有两个特性可以选择
在正则表达式匹配成功的前提下,匹配尽量多的字符
const str = "aabab"
const reg = /a.*b/ //默认贪婪
console.log(str.replace(reg,"1")) // 1
在正则表达式匹配成功的前提下,匹配尽量少的字符
const reg = /a.*?b/ // 懒惰性
console.log(str.replace(reg,"1")) // 1ab