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循环就行了,原理就是这样。

0
  • 本文分类:JavaScript
  • 本文标签:正则拼接正则修饰符模式匹配
  • 流行热度:已超过 51 人围观了本文
  • 最后更新:2020年10月12日 - 12时05分29秒
  • 发布日期:2020年10月12日 - 12时04分00秒
  • 版权申明:本文系作者@木灵鱼儿原创发布在木灵鱼儿站点。未经许可,禁止转载。

相关文章

微信收款码
微信收款码