修饰符 (g,i,m)
-
g : 全文进行匹配 (不加则匹配至第一个即停止)
-
i : 忽略大小写(默认大小写敏感)
-
m : 多行搜索
“He is a boy,Is he?”.replace('/\bis\b/gi','0')
=> "He 0 a boy,0 he?"
元字符(.,[],(),$,^,|,,)
- [] 字符类,满足其中一个即可
[abc] 字符类,(表或,有其中一个即可(a,b,c))
[^abc] 字符类取反,none of (a,b,c) 不包含组合里任意一个
[a-z] 从a至z的任意字符
[0-9] 从0至9的任意数字
[a-zA-Z] 从a至z或A至Z的任意字符
- . 除了回车符和换行符之外的所有符号
- \d 数字字符 ([0-9])
- \D 非数字字符([^0-9])
- \s 空白符
- \S 非空白符
- \w 单词字符 (字母数字下划线 [a-zA-Z_0-9])
- \W 非单词字符
- () 分组
2020-05-06 替换为05-06-2020
var reg = /^(\d{4})[/-](\d{2})[/-](\d{2})$/g
"2020-05-06".replace(reg,'$2-$3-$1')
分组:
- 重复单词
"broBroBroADC".replace(/(bro){3}/gi,'X') => "XADC" (broBroBro)
- 分组匹配
"bro1fr2g1h3gg".replace(/([a-z]\d){3}/gi,'X') => "bro1fXgg" (r2g1h3)
- 或
"broBroBroADC".replace(/Bro|A/g,'X') => "broXXXDC" (Bro Bro A)
- 忽略分组,不想捕获时再分组前加(?:....)
(?:sister).(ok) => $1 = ok
边界(^,$,\b,\B)
- ^ 以XXX开始(写前)
- $ 以XXX结束 (写后)
- \b 单词边界
- \B 非单词边界
量词(?,+,*,{})
- “?” 0次或1次 (最多出现1次)
- “+” 1次或多次 (最少出现1次)
- “*” 0次或n次 (任意次)
- {n} n次
- {n,m} n次到m次
- {n,} 至少出现n次
- {0,m} 最多出现m次
贪婪模式 (匹配最多次)
"12345678".replace(/\d{3,6}/g,'X') => "X78" (123456)
"123456789".replace(/\d{3,6}/g,'X') => "XX" (123456,789)
非贪婪模式(匹配最少次,量词后加?)
"12345678912".replace(/\d{3,6}?/g,'X') => "XXX12" (123 456 789)
前瞻
1.正向前瞻 (exp(?=assert))
2.负向前瞻 (exp(?!assert))
var reg = /\w(?=\d)/g (字符后面是数字)
"a2*3".replace(reg,'X') => "X2*3"
"a2*34v8".replace(reg,'X') => "X2*X4X8"
"a2*34vv".replace(/\w(?!\d)/g,'X') => "aX*3XXX"