从字符串构建 RegExp 时无法获得预期的输出

Failed to get expected output on building RegExp from a string

在casperjs(网页抓取依赖)中,我们不能将RegExp对象直接传递给网页上下文。因此,我需要将 regexp 作为字符串传递给网页上下文并在那里构建 RegExp。

var string = "(ABCD)"; 
var normalize = {
            regexp: '/(\()(\w*)(\))/g',
            newValue: ''
       }; 
var newString = string.replace(new RegExp(normalize.regexp), normalize.newValue); 
console.log(newString); -> It's printing "(ABCD)" instead of "ABCD"

关于我在获得 "ABCD" 的预期输出方面做错的任何建议?

由于您只能使用字符串,因此将模式定义为字符串(请记住转义每个反斜杠以获得正则表达式中的文字反斜杠)并从模式构建 RegExp 对象:

var normalize = {
            regexp: '(\()(\w*)(\))',
            newValue: ''
       }; 
var newString = string.replace(new RegExp(normalize.regexp, "g"), normalize.newValue); 

"g" 修饰符在 RegExp 构造函数中声明,而不是在 regexp 字符串模式中声明(因为 JS 正则表达式不支持内联修饰符)。