正则表达式快用快查

正则会用的时候真的很好用,但是概念真的太多,几乎每次用的时候都要现用现查,要么就是找一些现成的,这里自己做一个笔记吧

先上神器:

图形工具:http://regexper.com

查找当前目录下所有的.txt文件

find ./ -name *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
非单词字符

边界:

^
开始
$
结尾
\b
单词边界
\B
非单词边界

量词:

最多一个
+
至少一个
*
任意个
{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 此时忽略第二个分组信息

对象属性:

g
全局
i
大小写敏感
m
多行

方法:

test
测试是否匹配,返回true和false
reg.test('内容')//返回布尔值
因为有lastIndex属性,所以会出现结果变化的情形
exec
匹配结果返回数组