我正在重构一系列以两种方式使用的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('')
答案 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('%'));