Как я могу получить значение группы и определить его в одной строке в JavaScript? - PullRequest
1 голос
/ 18 мая 2019

Как определить группу регулярных выражений в 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 Ответ

1 голос
/ 18 мая 2019

Метод замены может принимать функцию.Этот код выполняет то, что вы просили, все в одной строке.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...