1.在[]中的表达式不要使用 .,要不然效果达不到
2.(.)?和(.?)的区别,前者分组只会匹配最后一个字符,而(.?)会获取匹配的整个串,此处的?是惰性匹配,
/a(.*?)c/g.exec("aabcdefc dd");
==>["aabc", "ab"];此处"ab"就是(.*?)的内容
/a(.)*?c/g.exec("aabcdefc dd");
==>["aabc", "b"];此处"b"就是(.)*?的内容
3.惰性匹配和贪婪匹配
贪婪匹配会尽量多的去匹配字符,惰性只会尽可能少的匹配,*就是贪婪匹配,*?是惰性匹配,具体的惰性匹配表如下:
表5.懒惰限定符
代码/语法 | 说明 |
---|---|
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
/a(.*?)c/g.exec("aabcdefc dd");
==>["aabc", "ab"];此处匹配的是"aabc"
/a(.)*c/g.exec("aabcdefc dd");
==>["aabcdefc", "f"];此处匹配的是"aabcdefc",比上面的aabc串长
/a(.*)c/g.exec("aabcdefc dd");
==>["aabcdefc", "abcdef"]