昨天去多益网络笔试,让再一次我知道了正则表达式有多重要。笔试卷子上考察正则表达式,选择、简答各一道,最后一道编程也考正则。我竟然把test和match是谁的方法都记错了(reg.test(str);str.match(reg))
一些我的笔记
1、声明
i:忽略大小写
g:全局匹配
m:多行匹配
也可以这样声明:
1
| let reg = new RegExp("aBc","i")
|
需要注意:
1 2 3
| let reg1 = /abc/g let reg2 = new RegExp(reg1) //这是两个正则表达式
|
1 2 3
| let reg1 = /abc/g let reg2 =RegExp(reg1) //可以这样用,但这两个变量是同一个正则表达式,两个变量指向同一个地址
|
2、方法
1 2
| reg.test(str) //查看str里有没有reg,返回true/false str.match(reg) //返回检索内容
|
3、正则表达式的具体写法
1
| let reg = /[1234567890][1234567890][1234567890]/g
|
一个[]代表一个字符,里头写取值范围
[]里面的写法还是比较随意的,可以用-来指定范围,比如
1 2 3
| let reg = /[0-9A-z][cd][d]/g let reg = /[^a]/g //匹配不是a的字符 let reg = /(abc|bcd)/g //匹配一个abc或bcd的子串
|
[]里的细节——元字符
. =>[^\r\n] 非行结束
\w =>[0-9A-z]
\W =>[^\w]
\d =>[0-9]
\D =>[^\d]
\s =>[\t\n\r\v\f]
\S =>[^\s]
\b =>表示匹配单词边界
\B =>非单词边界
\uXXXX =>表示匹配以十六进制编码的Unicode字符
一个()代表一个表达式
1 2 3 4
| var str="aaaa"; var reg =/(\w)\1\1\1/g;//()表示子表达式;\1表示引用第一个子表达式 var str ="aabb"; var reg =/(\w)\1(\w)\2/g;
|
一些修饰
1 2 3 4 5 6
| * =>匹配1->∞次 + =>匹配0->∞次 ? =>匹配0->1次 {x,y} =>匹配x->y个 ^abc =>以abc开头 abc$ =>以abc结尾
|
4、正则表达式里的属性和方法
reg.lastIndex //游标
reg.exec() //滑动游标
5、案例
the-first-name => theFirstName
把the-first-name变成小驼峰式
1 2 3 4 5
| let reg = /-(\w)/g let str = "the-first-name" console.log(str.replace(reg,function($,$1)){ return $1.toUpperCase() })
|