如果用一个形容词来形容正则的话我觉得那就是火星文,对于一个不了解的它的人来说可读性实在是太差。但对于开发人员来说,很多时候它为我们带来了很多的方便。
正则中的符号相当多,如果不进行下分类,这种火星文真的很难去记忆。
- 元字符
tips:
常见的还有
\b:匹配一个词的边界。
/\bm/匹配“moon”中得‘m’;
- /oo\b/并不匹配”moon”中得’oo’,因为’oo’被一个“字”字符’n’紧跟着。
\B匹配一个非单词边界
^如果在一个集合中,表示排除,而不是以某种匹配模式开头即反向字符集eg:[^xyz]
\s 等价于:
[\f\n\r\t\v\u00a0\u1680\u180e\u2000\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。
\S等价于:
[^ \f\n\r\t\v\u00a0\u1680\u180e\u2000\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
- 量词
3.分支和字符集
- (a|b|c) === [a-c]
-
/(ab bb cb)/ === /[abc]b/ - [abc] === [a-c]
- [^abc] === [^a-c]
4.分组&引用
l /(\d{4})-(\d{2})-(\d{2})/ 【分组】
l /(\d{4})-(\d{2})-\2/ 【引用】
第三个匹配项目 引用第二分组的模式 当两者相等的时候才会进行匹配
l /(?
“
l /(?
- replace
‘2018-09—07’.replace(/(\d{4})-(\d{2})-(\d{2})/,‘$1年$2月$3日’)
- RegExp.$[_1-9]
表示字符串本身
5.转义
-
使⽤用\ 转义
-
需要转义的字符?
Tips:
当需要使用正则字符本身的时候就需要用转义字符
6.零宽断言(lookaround assertions)
-
也翻译成 环视
-
根据⽅方向的不不同,分为lookahead 和lookbehind 3. 根据判定原则,分为 肯定 和 否定
- 惰性&贪婪
l 贪婪模式——在匹配成功的前提下,尽可能多的去匹配
l 惰性模式——在匹配成功的前提下,尽可能少的去匹配
l /.bbb/g.test(‘abbbaabbbaaabbb1234’) 4. /.?bbb/g.test(‘abbbaabbbaaabbb1234’)
根据样本选择匹配模式
l 贪婪模式⽤用于匹配优先量量词修饰的⼦子表达式
l 惰性模式⽤用于匹配忽略略优先量量词修饰⼦子表达式
8.修饰符&标志
-
g → global
-
i → ignoreCase
-
m → multiline
-
y → sticky
-
u → unicode
-
s → dotAll
9.使用方法
参考
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp#assertions
正则表达式方法总结