是否可以将字符插入RegExp模式?

时间:2018-07-12 00:13:47

标签: javascript regex

我正在重构一系列以两种方式使用的RegExp a / b模式。

一个使用^作为第三个字符。

/[^a-zA-Z0-9,?@&!#'"~ _;\.\*\/\-\+ ]/

另一个不使用^

/[a-zA-Z0-9,?@&!#'"~ _;\.\*\/\-\+ ]/

有没有一种方法可以编写一次并将^添加到第二个版本中呢?

这将引发错误,但是作为示例,有可用的东西吗?

varOne = /[a-zA-Z0-9,?@&!#'"~ _;\.\*\/\-\+ ]/

varTwo = [varOne.slice(0, 1), '^', varOne.slice(1)].join('')

1 个答案:

答案 0 :(得分:2)

您需要使用RegExp constructor从字符串生成正则表达式:

const regex = caret => `[${caret ? '^' : ''}a-zA-Z0-9,?@&!#'"~ _;\\.\\*\\/\\-\\+ ]`

const regex1 = new RegExp(regex(true));
const regex2 = new RegExp(regex(false));

console.log(regex1.test('%'));
console.log(regex1.test('abc'));

console.log(regex2.test('abc'));
console.log(regex2.test('%'));