JS正则表达式学习一

读到了老姚的正则表达式文章,对于正则表达式有了一个新的学习。在正则这块很多时候自己都是现用现查,很多地方都是囫囵吞枣。阅读老姚的新著,重新学习JS的正则表达式。分几个部分写一下读后笔记吧。

先贴一下老姚文章的地址。一七年的文章现在才看到,汗😓

文章共分七个章节介绍正则,我们这里主要做一下总结。

1. 首先,正则是匹配模式,要么匹配字符,要么匹配位置。

日常使用到最多的就是字符的匹配,比如说手机号的校验,用户昵称的校验等,很少会用到位置的匹配。但是其实我们常用的^$就是匹配位置的锚字符。关于具体的内容稍后在总结,重要的是这个宗旨要有。

2. 常用的字符匹配模式

正则表达式的强大就在于他的模糊匹配。文章把这块分成两个部分

  • 横向模糊匹配

这个是指字符串长度的模糊,最常用的如{m,n}指连续出现最少m次,最多n次。比如常用的手机号匹配/^1\d{10}$/,指以 1 开头,后面出现十个数字的字符串。这里的{10}{10,10}的简写,意思是只能出现十次。

  • 纵向模糊匹配

这部分是指某个字符可能是不确定的,比如[abc]指这个字符可以是 ‘a’、’b’ 或者 ‘c’。比如限制用户输入的内容只能是数字或者字母的时候,可以使用/^[0-9a-zA-Z]{5,10}$/

3. 字符组的简写和量词的简写

  • 字符组的简写

这里我们把[abc]这种形式称为字符组,如/^[0-9a-zA-Z]{5,10}$/这样的是简写的形式,-表示范围。除此之外还有排除字符组,如[^abc]表示这个字符不能是 ‘a’、’b’ 或者 ‘c’。另外还有常见的简写形式。

\d就是[0-9]。表示是一位数字。记忆方式:其英文是digit(数字)。
\D就是[^0-9]。表示除数字外的任意字符。
\w就是[0-9a-zA-Z_]。表示数字、大小写字母和下划线。记忆方式:w是word的简写,也称单词字符。
\W[^0-9a-zA-Z_]。非单词字符。
\s[\t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。记忆方式:s是space character的首字母。
\S[^\t\v\n\r\f]。 非空白符。
.就是[^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。记忆方式:想想省略号…中的每个点,都可以理解成占位符,表示任何类似的东西。

  • 量词的简写

{m,} 表示至少出现m次。
{m} 等价于{m,m},表示出现m次。
? 等价于{0,1},表示出现或者不出现。记忆方式:问号的意思表示,有吗?
+ 等价于{1,},表示出现至少一次。记忆方式:加号是追加的意思,得先有一个,然后才考虑追加。
* 等价于{0,},表示出现任意次,有可能不出现。记忆方式:看看天上的星星,可能一颗没有,可能零散有几颗,可能数也数不过来。

4. 贪婪匹配和惰性匹配

贪婪匹配是指,在匹配中如果出现量词区间,他就会尽可能多的去匹配,所以叫贪婪匹配。

比如说 /\d{2,5}/ ,可以匹配二到五次,他会尝试着匹配,知道不符合。这个会引发一个回溯的问题,等会儿会说。

与贪婪匹配相对的是惰性匹配,意思是二到五次的话,够了两次就不接着匹配了。如 /\d{2,5}?/ 。在后面加个问号就变成了惰性匹配。

 Comments