推荐一个在线测试和解读正则表达式的网站:
https://regex101.com/
学习地址:
http://www.runoob.com/jsref/jsref-obj-regexp.html
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
创建一个正则表达式的两种方法:
const pattern = /test/
//创建RegExp实例,传入的是一个字符串
const pattern = new RegExp("test","i")
上面两种创建正则表达式的方式有什么区别?
第一种不能含有变量
第二种由于使用字符串所以可以进行字符串拼接,拼上变量
对于在开发环境明确的推荐使用正则字面量,在运行时推荐使用构造函数
修饰符:
i 对大小写不敏感 /xxx/i
g 查找所有匹配项,查到第一个匹配时不会停止,继续向下
起止符号:
^指定开头字母,$指定结尾字母
匹配字符集:
[abc] 匹配abc中的任意一个字符
[^abc] 匹配除了abc外的任意一个字符
字符集的范围操作[a-z]
量词:
在字符后面添加?,比如/t?est/可以匹配test和est,匹配0次或1次
在字符后面添加+,比如/t+est/可以匹配test,ttest,匹配1次或多次
在字符后面添加*,比如/test/,匹配前字母0或1次,或多次
指定重复次数:{4} {4,10},{4,}
贪婪与非贪婪
以上运算符都可以是贪婪或者非贪婪,默认贪婪匹配所有可能字符,在运算符后添加?为非贪婪
比如a+?,对于字符串aaa,/a+/会匹配全部三个字符,而非贪婪模式/a+?/则匹配一个字符a
常用预定义字符集:
. 匹配除了换行符外的任意字符
\d 等价于[0-9]
\D 等价于[^0-9]
\w 匹配任何字母,数字和下划线 等价于[A-Za-z0-9]
\W
\s匹配任意空白字符
\S
分组:
前面的+*等符号只能影响其前面的术语
如果对一组术语使用操作符可以使用圆括号进行分组
使用 | 表示或,比如/(ab)+|(cd)+/可以匹配一个或多个ab或cd