Использование вывода регулярного выражения для подачи функции - PullRequest
1 голос
/ 16 октября 2019

Я пытаюсь запустить функцию, принимающую в качестве параметра критерии соответствия вызова замены, но я борюсь с этим. В сценарии:

x="foo OFFSET_5 bar";
regex=/OFFSET_(-?[0-9]*)\b/g;
function timesThree(n){  return n*3 }

Если я сделаю простое x.replace(regex, '$1'), результат будет, как и ожидалось, foo 5 bar. Однако я хочу передать эти 5 на timesThree, я не могу, получая всегда NaN вместо 15.

Я пытался x.replace(regex, timesThree($1)), но безрезультатно.

Где мой код не работает?

Заранее спасибо

1 Ответ

1 голос
/ 16 октября 2019

Вы сделали бы это с помощью функции-оболочки вокруг вызова:

x.replace(regex, (m, c0) => timesThree(c0));

Live Пример:

const x = "foo OFFSET_5 bar";
const regex = /OFFSET_(-?[0-9]*)\b/g;
function timesThree(n){  return n*3 }
console.log(x.replace(regex, (m, c0) => timesThree(c0)));

или в ES5:

x.replace(regex, function(m, c0){ return timesThree(c0); });

Live Пример:

var x = "foo OFFSET_5 bar";
var regex = /OFFSET_(-?[0-9]*)\b/g;
function timesThree(n){  return n*3 }
console.log(x.replace(regex, function(m, c0){ return timesThree(c0); }));

Это работает, потому что функция вызывается с общим соответствием в качестве первого аргумента (m, который мы не используем), а затем с каждым захваченным текстом каждой группы захвата. в качестве последующего аргумента (c0 в этом случае). Таким образом, мы передаем текст первой группы захвата в timesThree, который неявно преобразует строку в число через *. Полученное число неявно преобразуется обратно в строку и вставляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...