我转过几个弯 绕过那个小雨楼
拿着蒲扇摆着衣衫渡着紧箍咒
不问天涯不停留 喝过几壶酒
不过年少白头道义放胸口
倘若明天之后 遥看前尘剑封侯
似那天上神仙无所求
朝朝暮暮君如梦醒十分不为何理由
是真是假是惶恐是无休
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
又过了几个弯 算尽天量道莫慌
踏这田园闻这芳草香
跌跌撞撞仗剑天涯折煞不枉无笔良
是梦是幻是温柔是家乡
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
谁能与我一醉方休
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
评论(0)