正则表达式
一、 语法
//1.直接写表达式
var reg1 = /abc/
//2.创建实列化对象
var reg2 = new RegExp(`abc`)
var reg2 = new RegExp(/abc/)
// 例子
var str = 'helloL'
console.log(str.replace(/l/g, 'L'))
var reg1 = new RegExp('l', 'gi') //正则对象
console.log(str.replace(reg1, 'w'))
二、 标志
//g-->全局
//i-->忽略大小写
//m-->多行 u-->Unicode y-->粘性匹配
var reg1 = /abc/g
var reg2 = new RegExp(`abc`, 'gi')
三、 方法
1. test()
匹配内容是否存在字符串中,返回 true/false
var str2 = 'hello world'
var reg2 = /l/g
//正则.test(匹配字符串) 判断是否存在,返回true/false
console.log(reg2.test(str2))
// true
2. exec()
检索字符串中指定的值。返回找到的值,并确定其位置。
//exec
//返回值:如果存在,返回数组;如果不存在,返回null
//返回数组:包含匹配出来的字符串片段、index表示匹配的索引位置、group、input表示原本的字符串
//正则对象.lastIndex 表示匹配后的更新的 下一次匹配索引起始位置、如果匹配失败,lastIndex归零
var str2 = 'hello world'
var reg2 = /l/g
reg2.exec(str2)
// ["l", index: 2, input: "hello world", groups: undefined]
reg2.exec(str2)
// ["l", index: 3, input: "hello world", groups: undefined]
reg2.exec(str2)
// ["l", index: 9, input: "hello world", groups: undefined]
reg2.exec(str2)
// null
3. match()
/*
字符串.match(正则)
返回
1. 正则不包含标志g,结果和exec一致
2. 包含标志g,返回匹配内容的数组
3. 匹配失败返回null
*/
var str3 = 'hello world'
str3.match(/a/g)
// null
str3.match(/l/g)
// ["l", "l", "l"]
实例
var str4 = 'yes make my day'
//1 . 表示任意字符
var reg4 = /.y/
console.log('.', reg4.exec(str4))
// ["my", index: 9, input: "yes make my day", groups: undefined]
//2 \d 或 [0-9] 数字 []表示匹配一个字符可能情况 , - 表示范围
var str5 = 'qwe1058asd'
var reg5 = /[468]/
console.log('\\d', reg5.exec(str5))
//3 \D 非数字
var reg5 = /\D/
console.log('\\D', reg5.exec(str5))
//4 \w 或 [A-Za-z0-9_] 数字+大小写+下划线
var reg6 = /[a-z]/
console.log('\\w', reg6.exec(str5))
//5 \s 空字符
var str7 = 'hello world javascript'
var reg7 = /\s[a-z]/
console.log('\\s', reg7.exec(str7))
//6 \uXXXX unicode编码 XXXX表示16进制编码
var str8 = '哇哈?\\'
var reg8 = /[\u4E00-\u9FA5]\?\\/ //基本汉字范围
console.log('\\u', reg8.exec(str8))
//7 [xyz] 一个字符里面可以是xyz任意一个
//8 [^xyz] 一个字符里面除了xyz以外的任意字符
var str9 = 'apple Apple'
var reg9 = /^[A-Z]pple/
console.log('^开头', reg9.exec(str9))
var reg9 = /[A-Z]pple$/
console.log('$结尾', reg9.exec(str9))
var reg9 = /^a.*e$/
console.log('开头结尾', reg9.exec(str9))
var reg9 = /le\b/
console.log('零宽', reg9.exec(str9))
//9 () 表示捕获内容 在exec方法当中会单独存放()里面的内容放在下标当中
var str10 = 'today is good day'
var reg10 = /[a-z](day) (is)/
console.log('括号()', reg10.exec(str10))
//10 \n 引用前面小括号捕获的结果 ,n表示第几个括号
var str11 = 'ha!ha?ha%ha!'
var reg11 = /ha(\!)ha(\?)ha(\%)ha\1/
console.log('\\n', reg11.exec(str11))
//11 ?: 不捕获
var str12 = 'today is good day'
var reg12 = /[a-z][a-z](?:day)/
console.log('?:', reg12.exec(str12))
//12 {n} 刚好发生了n次
var str13 = 'qwertyuiopasqw'
var reg13 = /[a-z]{8,10}/
console.log('{}', reg13.exec(str13))
// x|y 或
var str14 = 'green apple'
var reg14 = /(green|red)/
console.log('|', reg14.exec(str14))
//13 #ff6600
var str15 = '#ff6600'
var reg15 = /#(?=[a-f0-9]{6})/
console.log('(?=)', reg15.exec(str15))