再一次开始正则表达式的学习,可能更应该说是复习。
这一次的学习从MDN文档开始,首先记住元字符,它们表示特定的含义
对于匹配到单词的元字符
\d:匹配数字,\D则匹配非数字;
\w:匹配单字符,\W匹配一个非单字符,单字符——[A-Za-z0-9_];
\s: 匹配一个空白字符,\S匹配一个非空白字符;
.:匹配除换行符之外的任何单个字符,那么搭配上换行符\n,也就代表了所有字符
关于匹配的起始元字符:
^:匹配开头,$:匹配结束
对于数量的匹配元字符:
顾名思义,就是指这个字符你想匹配它出现几次的场景
*:意思是这个表达式出现0次或多次
+:匹配表达式出现一次或者多次的场景
?:匹配表达式出现0次或者1次
{n}:匹配表达式出现n次
关于匹配模式 分组和引用
(x):捕获符号,捕获并且记住
(?:x): 捕获但是不记住
一图解释所有流
关于分组
关于查找模式
x(?=y):匹配后面为y的x
x(!=y):匹配后面不为y的x
(?<=y)x:匹配前面为y的x
(?<!y)x:匹配前面不为y的x
image.png
如何将用户输入转义为正则表达式中的一个字面字符串:
function escapeRegExp(string){
return string.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$&");
//$&表示整个被匹配的字符串
}
关于工作中小小的应用,在一个字符串中需要查询另一个字符串的存在,因为需要在一个fullpath中找到另一个path的存在,但是因为path的顺序不一定能对上,所以把path先剪切成一个数组,然后组成一个正则表达式,只要能在fullpath当中匹配到path里面的元素就成功匹配
const fullPath = '1001,1002,1005'
const rowPath = '1005,1002'
const rowPathArr = rowPath.split(',');
let regexp = '.*';
rowPathArr.map(rPath => {
regexp = regexp + rPath + '.*'
})
let regex = new RegExp(regexp);
if (regex.test(fullpath)) {
return true
}