Регулярное выражение JavaScript: замена $ 1 на f ($ 1) - PullRequest
2 голосов
/ 15 ноября 2010

У меня есть регулярное выражение, скажем, /url.com\/([A-Za-z]+)\.html/, и я хотел бы заменить его на new string $1: f($1), то есть на постоянную строку с двумя интерполяциями, захваченную строку и функцию захваченной строки.

Какой лучший способ сделать это в JavaScript? «Наилучший» здесь означает некоторую комбинацию (1) наименее подверженного ошибкам, (2) наиболее эффективного с точки зрения пространства и скорости и (3) наиболее идиоматически подходящего для JavaScript, с особым акцентом на # 3.

Ответы [ 3 ]

7 голосов
/ 15 ноября 2010

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

Например:

str.replace(/regex/, function(match, group1, group2, index, original) { 
    return "new string " + group1 + ": " + f(group1);
});
5 голосов
/ 15 ноября 2010

При использовании String.replace вы можете предоставить функцию обратного вызова в качестве параметра замены вместо строки и создать собственное, очень настраиваемое возвращаемое значение.

'foo'.replace(/bar/, function (str, p1, p2) {
    return /* some custom string */;
});
4 голосов
/ 15 ноября 2010

.replace() принимает функцию для замены, например:

var newStr = string.replace(/url.com\/([A-Za-z]+)\.html/, function(all, match) {
  return match + " something";
});

Вы можете преобразовать результат так, как хотите, просто верните все, что хотите, чтобы совпадение было вэтот обратный звонок. Вы можете проверить это здесь .

...