如何获取组的值并在JavaScript中一行定义它?

时间:2019-05-18 13:28:26

标签: javascript regex

如何在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。我知道我在这里做的事情可能看起来很晦涩,但这是我为正在编写的编程语言编写的编译器代码的一部分。

1 个答案:

答案 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);