1:贪婪匹配和非贪婪匹配
正则表达式中量词有
*(0次或者多次)
?(0次或者1次)
+(1次或者多次)
{m, n}(大于等于m小于等于n次)
{n}(n次)
这些量词会尽可能多的匹配,比如:
'abababa ababc abe'.match(/(ab)+/g),匹配结果是['ababab', 'abab', 'ab'],统称贪婪匹配
当这些量词后面再跟一个?,就变成了非贪婪匹配,会尽可能少的匹配,比如
'abababa ababc abe'.match(/(ab)+?/g),用的匹配结果是 ["ab", "ab", "ab", "ab", "ab", "ab"]
2:捕获分组和非捕获分组
正则表达式中的小括号表示分组,分组的内容可以通过一下方式获取
-
字符串的replace方法,$n表示匹配到的第n个分组
‘2011-05-20 2012-05-20 2013-05-20’.replace(/(d{4})-(\d{2})-(\d{2})/g, ‘$3-$2-$1’)
返回值为"20-05-2011 20-05-2012 20-05-2013"
‘2011-05-20 2012-05-20 2013-05-20’.replace(/(\d{4})-(\d{2})-(\d{2})/g, (…args) => {console.log(args)})
-
反向引用
/(\d{3})\1\1/’.test(‘12312313’) -
非捕获分组:小括号中匹配到的内容不会放到匹配结果的分组中/(?:ab)+/g,这个正则表达式匹配的内容没有分组
3:正向肯定查找和正向否定查找
?= 正向肯定查找,x(?=y)匹配x当且仅当x后面紧跟着y
?! 正向否定查找,x(?!y)匹配x当且仅当x后面不紧跟着y