一、字面量创建正则表达式
let str = "wwwbaidu.coms";
let lth = /w/g;
console.log(lth.test(str)); //true
//这种方式的缺陷是不能使用变量
let lth = "u";
console.log(/lth/.test(str)); //false 这里不会将lth看成变量,而是去匹配lth
//解决方法
let lth = "u";
console.log(eval(`/${lth}/`).test(str));
二、使用对象创建正则表达式
let str = "wwwbaidu.coms";
let ts = new RegExp("u","g"); //第一个参数是正则表达式,第二个参数是当前模式
console.log(ts.test(str)) //true
三、选择符的使用
let str = "wwwbaidu.coms";
let lth = /ba|@/g;
console.log(lth.test(str)) //true 匹配ba或者@,类似于js里面的 ||
四、原子组和原子表的使用
let str = "wwwbaidu.coms";
let lth = /[w@]/g //中括号就是原子表,表示匹配其中的某一个元素
console.log(lth.test(str)) //true
let str = "wwwbaidu.coms";
let lth = /(w@)/g //括号就是原子组,其中的元素为一个整体,表示要完全匹配其中的元素
console.log(lth.test(str)) //false
五、转义需要好好理解
转义就是一个字符可能会有两种意义,有一个默认意义和特殊意义,需要使用\
来取特殊意义
let str = "wwwbaiducoms";
let lth = /./g
console.log(lth.test(str)) //true
//按道理str里面并没有“.”,但是结果却是true,这是因为“.”有两种含义
//一种含义是匹配除换行符之外的所有字符,一种含义就是“.”
let lth = /\./g
console.log(lth.test(str)) //false 这样就会取匹配“.”了
六、字符的边界
//如果需要匹配网站,就必须http开头,但是下面这种情况也会匹配成功
let str = "abchttps://www.baidu.com";
let lth = /(https)/g
console.log(lth.test(str)) //true
//解决方法
let lth = /^(https:\/\/www.baidu\.)(com)$/g
console.log(lth.test(str)) //false “^”表示以某个字符开始,“$”表示以某个字符结束
七、元字符
八、反义
这里只需要记一种就行了,就记元字符,取大写字母就是它的反义,比如\d
是数字,那么\D
就是除了数字,小技巧:/[\d\D]/
这样就可以匹配所有任何的字符了,还有注意区分这里的“^”,在原子组里面代表的除了后面的元素,在表达式最前面就代表以某个字符开始
九、模式修正符
修正符 i: 忽略正则表达式中大小写匹配
修正符 g: 全局匹配,本意是对字符串进行完整匹配
修正符 m: 多行匹配,本意是如果在字符串中存在换行等字符,同样可进行匹配,返回完整匹配数组
let str = `
#http:@
www.
#baidu.com@
`
let lth = /^\s+#.+@$/g
console.log(str.match(lth)) //null 这是因为会一直匹配到最后
//优化
let str = `
#http:@
www.
#baidu.com@
`
let lth = /^\s+#.+@$/gm
console.log(str.match(lth)) //['\n #http:@', ' #baidu.com@']
//将每一行当作独立的字符串,单独匹配,可以有开始和结束字符匹配
修正符 s: 单行匹配,本意是将多行字符串视为一行,换行符视为普通字符串
修正符 x: 忽略空白匹配
十、字符匹配
属性别名
/\p{L}/u来使用
//script文字系统简写为sc,sc=Han可以匹配中文,匹配其他语言,查阅下面的文字语言表
let str = "我爱你china2020!"
let lth = /\p{sc=Han}/gu
console.log(str.match(lth)) //['我', '爱', '你']
字符也有unicode文字系统属性 Script=文字系统,使用 \p{sc=Han} 获取中文字符 han为中文系统,其他语言请查看文字语言表
写到这里,突然发现有位大佬和我看的同一个视频,直接上链接,不求写了
大佬博客
视频地址