参考:
https://juejin.im/post/5965943ff265da6c30653879
http://blog.didispace.com/regular-expression-all/
第1章 正则表达式字符匹配
惰性匹配:
/\d{2,5}?/
表示匹配2次就够,使用:量词后面加个问号
第2章 正则表达式位置
^(开头)
$(结尾)
\b(
单词边界)
\B(
非单词边界)
(?=p)
(p
前面的位置) (?!p)
第3章 正则表达式括号
正则替换:
"2017-06-12".replace(/(\d{4})-(\d{2})-(\d{2})/, "$2/$3/$1");
或者
"2017-06-12".replace(/(\d{4})-(\d{2})-(\d{2})/, function(match, year, month, day) {
return month + "/" + day + "/" + year;
});
正则提取:
"2017-06-12".match(/(\d{4})-(\d{2})-(\d{2})/) // => ["2017-06-12", "2017", "06", "12", index: 0, input: "2017-06-12"]
反向引用:
/\d{4}(-|\/|\.)\d{2}\1\d{2}/.test("2016-06/12") // false \1引用(-|\/|\.)
非捕获分组:
"ababa abbb ababab".match(/(?:ab)+/g) // => ["abab", "ab", "ababab"] (?:ab)为非捕获组
第4章:正则表达式回溯法原理
一句话就是匹配到结尾发现不满足正则表达式, (若已有回退则回退至回退前的上一步)直到满足条件结束
第5章 正则表达式的拆分
竖杠“|”,的优先级最低
1.转义符 \
2.括号和方括号 (...)
、(?:...)
、(?=...)
、(?!...)
、[...]
3.量词限定符 {m}
、{m,n}
、{m,}
、?
、*
、+
4.位置和序列 ^
、$
、 \元字符
、 一般字符
5. 管道符(竖杠)|
上面操作符的优先级从上至下,由高到低。
辅助工具:
第6章 正则表达式的构建
其它:
正则字符拼接:
new RegExp('[' + Object.keys(escapeChars).join('') +']', 'g')