正则总结

正则:https://juejin.im/post/5965943ff265da6c30653879 如有帮助请感谢掘金作者

*正则是衡量程序员水平的一个侧面标准*

这个知识点真的是我一直以来都是我知识点缺失的一块,以前也看过文档或是讲解的知识点的帖子看过一次了解一些又忘了,感觉很烦人的一个知识点尤其是 ?* + 什么的代表什么当时记住转身就忘,然后决定总结一下加深一下记忆,目的是简单的业务当中用到的正则自己就可以手写复杂的正则也可以看懂,总而言之不仅能看懂别人的正则还要自己会写正则,其实整理完之后感觉之前让自己模糊的点在于字符组的简写、量词的简写以及位置相关的符号混在一起
总结:其实这些也就是正则最基础的一些知识点,看完了,记住了也不一定正则就能多明白,在掌握基础知识后,我觉得多看看写好的正则,分析下人家怎么写的 能看懂,一点点就熟练起来了

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

字符匹配

正则表达式之所以强大,是因为其能实现模糊匹配。而模糊匹配有两个方向上的模糊:横向模糊和纵向模糊。
 
横向模糊指的是一个正则可匹配的字符串长度是不固定的,可以是多种情况的。
eg:/ab{2,5}c/,表示匹配第一个字符是a,接下来2到5个字符b最后是字符c。
 
纵向模糊指的是一个正则匹配的字符串,具体到某一给字符时,它可以不是某个确定的字符可以有多种可能。
eg:/[abc]/,表示该字符可以是字符a,b,c中的任何一个。

字符组

范围表示法
用连字符 - 来省略和简写;因为连字符有特殊用途,那么要匹配字符‘-’可以使用 进行转义,总之不会让引擎认为是范围表示法就可以。
 
排除字符组
排除字符组(反义字符组)表示除了哪些之外的任意字符。字符组的第一位放 ^ (脱字符),表示求反的概念。
 
常见的简写形式
d 就是[0-9]。表示是一位数字。
D 就是[^0-9]。表示除数字外的任意字符。
w 就是[0-9a-zA-Z_]。表示数字、大小写字母和下划线。
W 就是[^0-9a-zA-Z_]。非单词字符。
s 就是[ v f]。表示空白符,包括空格、水瓶制表符、垂直制表符、换行符、回车符、换页符。
S 就是 [^ v f]。非空白符。
. 通配符,几乎表示任意字符。换行符、回车符、行分隔符和段分隔符除外。

量词

量词也称重复。掌握{m,n}的含义后,只需要记住一些简写形式。
 
{m,}表示至少出现m次。
{m}等价于{m,m},表示出现m次。
 
? 等价于 {0,1},表示出现或者不出现。最多一次。
+ 等价于 {1,},表示出现至少一次。
* 等价于 {0,},表示可能不出现或出现任意次。
 
多选分支:可以支持多个子模式.
用 | (管道符)分隔,表示其中任何之一。分支结构是惰性的,即当前面的已匹配,后面的就不再尝试匹配。
个人理解:有点像js中,1 || 2 => 1
  • 匹配16进制颜色值
let hexReg = /#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})/g;
  • 匹配时间
let timeReg = /^[01][0-9]|[2][0-3]:[0-5][0-9]$/;
  • 匹配日期
let dateReg = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
  • 匹配文件路径

let fileReg = /^[a-zA-Z]:\([^\:*<>|"
/]+\)*([^\:*<>|"
/]+)?$/;

位置匹配

^ (脱字符)匹配开头,在多行匹配中匹配行开头。
$ (美元符号)匹配结尾,在多行匹配中匹配行结尾。
 是单词边界。
B 是非单词边界。
(?=p),其中p是一个子模式,即p前面的位置。
(?!p)就是(?=p)的反面意思,即不是p前面的位置。

括号

引用分组可以进行数据提取以及更强大的替换操作。
提取可是使用字符串的match()方法,也可以使用正则对象的exec()方法,同时可以使用RegExp构造函数的全局属性$1至$9来获取。
 
反向引用:表示引用之前的分组。可以写为1 ,既然有1,那么2、3也是同样。
 
单独记一个:讲解括号那块的一个知识点
非捕获分组 (?:p)
解释:如果只想要括号最原始的功能,但不会引用它,即,既不在API中引用,也不在正则里反向引用。此时可以使用非捕获分组 (?:p)
eg:
var regex = /(?:ab)+/g;
var string = "ababa abbb ababab";
console.log( string.match(regex) ); => ["abab", "ab", "ababab"]

相关API

String#search
String#split
String#match
String#replace
RegExp#test
RegExp#exec

修饰符

g 全局匹配,即找到所有匹配的,单词是global
i 忽略字母大小写,单词ingoreCase
m 多行匹配,只影响^和$,二者变成行的概念,即行开头和行结尾。单词是multiline
 
原文地址:https://www.cnblogs.com/zhenjianyu/p/12965536.html