如何在JavaScript中定义一个正则表达式组并一行访问全部?
我尝试使用eval来获取已定义的正则表达式组的值:
let str = `
global stuff = 1;
global h = 0;
function inc(arg) {
inc = inc + 1;
};
main {
repeat(inc, 10);
}
`;
str = str.replace(/repeat\((.*?|$1), (.*?|$2)\)/gm, "$1".repeat(eval("$2")));
console.log(str);
我希望输出为
`global h = 0;
function inc(arg) {
h = h + 1;
};
main {
inc;
inc;
inc;
inc;
inc;
inc;
inc;
inc;
inc;
inc;
}`
,因为我想将repeat(inc, 10);
转换为
inc;
inc;
inc;
...
,但这给了我这个错误:ReferenceError: $2 is not defined
。我知道我在这里做的事情可能看起来很晦涩,但这是我为正在编写的编程语言编写的编译器代码的一部分。
答案 0 :(得分:1)
replace方法可以具有功能。这段代码可以一站式完成您的要求。
let str = `
global stuff = 1;
global h = 0;
function inc(arg) {
inc = inc + 1;
};
main {
repeat(inc, 10);
}
`;
str = str.replace(/(\s+)repeat\((.*?|$1), (.*?|$2)\);/gm, (match, p0, p1, p2) => (p0 + p1 + ";").repeat(p2));
console.log(str);