如何生成动态正则?new RegExp

日常使用的正则表达式,都是写死的,但有的时候需要根据不同数据动态生成正则。

比如,一个text字符串“今天是[星期三],[星期三]是晴朗的一天”,其中“[星期三]”在存储数据时候,要用Wednesday代替,注意关键词有一个[]。

1、正常str的replace写法是,只能替换一个

const text = "今天是[星期三],[星期三]是晴朗的一天"
const replaceText = text.replace("[星期三]", "Wednesday");

2、但是要全部替换,得这么写,因为属于特俗符号[],直接写正则/[星期三]/g,是不生效的。

const text = "今天是[星期三],[星期三]是晴朗的一天"
const replaceText = text.replace(/\[星期三\]/g, "Wednesday");

3、星期有7天,所以星期三是个动态变量,有可能是星期四、星期五,我们的replace不可能每一个星期都写一遍,所以理论上new一个正则对象就可以。

const week = "[星期三]"
const text = `今天是${week},${week}是晴朗的一天`
const regexp = new RegExp(week , "g");
// 此时的正则为:/[星期三]/g
const replaceText = text.replace(regexp, "Wednesday");

实际上,这个是失败的,原因就在于第2条,其中有特殊符号,此时生成的正则表达式是,实际上无法匹配到特殊符号。

/[星期三]/g

4、其中关键点就在符号[]的处理上,想要正确的表达式,需要生成的regexp中特殊符号"[","]"前面需要有一个标记"\"符号(使其失去原有的特殊含义,变为普通字符进行匹配),所以先处理这个符号。

const week = "[星期三]"

// 此时regWeek的结果为:\[星期三\]
const regWeek  = week.replace(/\[/g, "\\[").replace(/\]/g, "\\]");

// 此时的正则表达式结果是:/\[星期三\]/g
const regexp = new RegExp(regWeek, "g");


const text = "今天是[星期三],[星期三]是晴朗的一天"
const replaceText = text.replace(regexp, "Wednesday");

// replaceText的结果是:今天是Wednesday,Wednesday是晴朗的一天

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值