正则会用的时候真的很好用,但是概念真的太多,几乎每次用的时候都要现用现查,要么就是找一些现成的,这里自己做一个笔记吧
先上神器:
图形工具:http://regexper.com
查找当前目录下所有的.txt文件
基础知识:
\b 单词边界 \ba\b 查找字母 a g 表示全局 global \ 转义 () 用括号表示分组,提取的时候用$1,$2表示第一组、第二组... ^ 表示开头 $ 表示结尾 {n} 表示数量 [/-] 表示或,/或者-,one of的意思 [^abc] 反向类,表示选择不是a或b或c的 i 忽略大小写 ignore m 多行搜索 multi \r 回车符 \n 换行符 \0 空字符
|
定义正则:
var reg=/\bis\b/g 'He is a boy, is he?'.replace(reg,'IS') He IS a boy, IS he? var reg=new RegExp('\\bis\\b', 'g')
|
字符类:
'a1b2c3d4e5'.replace(/[abc]/g, 'X') X1X2X3d4e5 'a1b2c3d4e5'.replace(/[^abc]/g, 'X')//取反 aXbXcXXXXX
|
范围类:
[a-z]//小写字母 'a1b2c3d4e5'.replace(/[abc]/g, 'Q') Q1Q2Q3Q4Q5 [a-zA-z]//大小写 [0-9-]//数字和横线 '2016-09-01'.replace(/[0-9-]/,'A') AAAAAAAAAA
|
预定义类:
. 除了回车与换行的任意字 \d 数字 \D 非数字 \s 空白字符 space \S 非空白字符 \w 单词字符,字母数字下划线 word \W 非单词字符
|
边界:
量词:
? 最多一个 + 至少一个 * 任意个 {n} n次 {n,m} n到m次 {n,} 至少出现n次
|
贪婪模式:尽可能多的匹配
'123456789'.replace(/\d{3,6}/g,'X') X789
|
非贪婪模式:匹配成功一次即可,后续不继续匹配。在量词后面加上?
'123456789'.match(/\d{3,5}?/g) ['123','456','789'] '12345678'.replace(/\d{3,6}?/g,'X') XX78
|
分组:通过( )实现
'a1b2c3d4'.replace(/([a-z]\d){3}/g,'X') Xd4
|
或:|
'supermen'.replace(/super|men/g,'X') XX 'supernsupmen'.replace(/sup(er|me)n/g,'X') XX
|
反向引用:分组之后用变量捕获分组信息
'2017-09-01'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1') 09/01/2017
|
忽略分组:不希望捕获分组信息,在()内添加 ?: 即可
'2017-09-01'.replace(/(\d{4})-(?:\d{2})-(\d{2})/g,'$2$1') 201701 此时忽略第二个分组信息
|
对象属性:
方法:
test 测试是否匹配,返回true和false reg.test('内容')//返回布尔值 因为有lastIndex属性,所以会出现结果变化的情形 exec 匹配结果返回数组
|