2020-07-31 字符串中的正则匹配
记住:正则表达式是匹配模式,要么匹配字符,要么匹配位置
字符匹配攻略
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、多选分支
用(p1|p2)
表示其中任意一个,用管道符号分隔,是惰性的即匹配一个后面就不匹配了
6、案例分析
匹配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返回的数组格式是不一样的