javascript 拼接两条正则或多条正则
今天遇到一个问题,就是在使用mock模拟本地api请求的时候,因为做了一个全局配置文件,配置文件里面有一个devUrl属性,这个属性是本地的url地址,所以我就想着,让mock那边自动将devUrl和api地址进行拼接。
但是api地址段不一定只是字符,有可能是正则。
所以,我们需要进行拼接正则。
知识点
1.如何获取正则的匹配的那段文本?
也就是/[a-z]/ig
中我们怎么拿到[a-z]
,因为这个内容是自定义的,你不知道他会是什么内容。
这里我们就需要了解到reg对象的source属性:
RegExpObject.source
source就可以直接返回给我们模式匹配所用的文本
/[a-z]/ig.source; //"[a-z]"
2.如何获取正则的匹配模式修饰符
这问题es5的话,就很头疼了,你需要考虑到所有的修饰符,然后去判断:
/[a-z]/ig.global //true 是否设置了 "g" 修饰符
/[a-z]/ig.ignoreCase //true 是否设置了 "i" 修饰符
/[a-z]/ig.multiline //true 是否设置了 "m" 修饰符
然后我们需要一个个if判断,然后添加,多头疼。
好在es6提供了一个新的方法,可以一口气拿到所有的修饰符:flags
有兴趣可以看看我这篇es6正则
/[a-z]/ig.flags //"gi"
3.如何进行拼接
我们可以使用new RegExp()的方式创建一个新的正则对象。
let a = /[a-z]/ig;
new RegExp(a.source+'[A-Z]',a.flags); // /[a-z][A-Z]/ig
在new出这个新的正则对象时,我们是可以对内容进行拼接的。
方法
let a = /[a-z]/ig;
let b = /[A-Z]/im;
let c = new RegExp(a.source + b.source,modMerge(a.flags,b.flags));
console.log(c); // /[a-z][A-Z]/gim
//修饰符合并去重
function modMerge(a,b) {
let modifier = [];
//合并
modifier.push(...a.split(""));
modifier.push(...b.split(""));
//去重
modifier = Array.from(new Set(modifier)).join("");
return modifier;
}
这样就可以了,如果你有多个正则需要合并,自己做个for循环就行了,原理就是这样。
分类:
JavaScript
标签:
正则拼接正则修饰符模式匹配
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据