记住:正则表达式是匹配模式,要么匹配字符,要么匹配位置
字符匹配攻略
1、模糊匹配:纵向模糊匹配和横向模糊匹配 横向模糊匹配使用量词如{m,n},表示连续出现最少m次,最多n次 纵向模糊匹配使用字符祖如[abc],表示a、b、c中任意一个
2、字符组:需要强调是的,虽是字符祖,但只是其中一个字符
范围表示法:用-连接
排除字符组:用[^]表示除了之外
常见的简写形式:
\d:表示[0-9],表示是一位数字,digit
\D:表示[^0-9],表示非数字外的任意字符
\w:表示[0-9a-zA-Z_],表示数字、大小写u和下划线
\W:表示[^0-9a-zA-Z_],非单词字符
\s:表示[\t\v\n\r\f],表示空白符,包括空格,水平制表符,换行符,回车符等
\S:表示非空白符
.:表示[^\n\r\u2020\u2029],通配符
如果要匹配任意字符,可以用[\d\D]、[\w\W]、[\s\S]和[^]中任何一个
3、量词:也叫重复,记住一些简写形式
简写形式:
{m,}表示至少出现m次
{m}等价于{m,m},表示出现m次
?等价于{0,1}表示出现或者不出现
+等价于{1,}表示出现至少一次
*等价于{0,}表示出现任意次
4、元字符,在正则中具有特殊含义的字符,需要转义
^、$、.、*、+、?、|、\、/、(、)、[、]、{、}、=、!、:、-
5、贪婪与惰性匹配
贪婪是尽可能的多匹配,惰性与之相反
6、多选分支
用(p1|p2)表示其中任意一个,用管道符号分隔,是惰性的即匹配一个后面就不匹配了
7、案例分析
匹配16进制颜色:/#[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/g
匹配时间:/^([01][0-9]|[2][0-3]):[0-5][0-9]$/
匹配日期:/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
正则表达式位置匹配攻略
一共有6个锚:
^ $ \b \B (?=p) (?!p)
^:匹配开头
$:匹配结尾
\b:单词边界,具体就是\w与\W之间的位置,也包括\w与^之间的位置和\w与$之间的位置
\B:就是\b的反面意思
(?=p):p是一个子模式,即p前面的位置
(?!p):与上面相反
相关案例:
数字的千位分隔符表示法
/(?!^)(?=(\d{3})+$)/g
正则表达式括号的作用
分组:如(ab)+
分支:如(p1|p2)
提取数据:使用match方法,返回一个数组,成员为匹配到第一个字符串
替换:replace(regx,fn),第二个参数指代相应的分组
非捕获括号:(?:p)和(?:p1|p2|p3)表示不返回该组匹配的内容,即匹配的结果中不计入这个括号
相关案例:
字符串的trim方法模拟:/^\s+|\s+$/g
单词首字母大写:/(?:^|\s)\w/g
修饰符:共3个
g:全局匹配
i:忽略字母大小写
m:多行匹配
字符串方法(match、replace、search)
match方法:返回的是一个数组,第一个元素是整体匹配结果,然后是各个分组(括号里)匹配的内容,然后是匹配下标,最后是输入的文本。另外,正则表达式是否有修饰符g,match返回的数组格式是不一样的