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

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

最佳答案

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

关于javascript - 如何获取组的值并在 JavaScript 的一行中定义它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56199401/

相关文章:

javascript - 如何在 jqGrid 中的日期列中使用输入类型 ='date'

java - 正则表达式:捕获两个单词之间的单词

javascript - 这是用正则表达式完成的吗?格式化经纬度

jquery - 使用带有 jQ​​uery 或正则表达式的 for 循环从多个 div 中的字符串中获取单词

c++ - 正则表达式 : Alphanumeric strings with constraints

javascript - 在一维数组中查找时间序列数据的波峰和波谷 - Javascript

javascript - 无法使用 jQuery 设置 HTML

javascript - 使用 PHP 和 MySQL 的多重下拉消除形式

javascript - Django 中加载网页后调用动态 python 函数

python - 如何从一串相连的日期中获取日期