2020-07-31 JS字符串中的正则匹配

184 阅读2分钟

记住:正则表达式是匹配模式,要么匹配字符,要么匹配位置

字符匹配攻略

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返回的数组格式是不一样的