Ответ 1
Вот так:
str.replace(regex, function(match, $1, $2, offset, original) { return someFunc($2); })
Вы можете сделать так, как в JavaScript:
var str = "123 $test 123";
str = str.replace(/(\$)([a-z]+)/gi, "$2");
Это (довольно глупо) заменит "$ test" на "test". Но представьте, что я хотел бы передать полученную строку из $2 в функцию, которая возвращает другое значение. Я попытался сделать это, но вместо того, чтобы получить строку "test", я получаю "$ 2". Есть ли способ достичь этого?
// Instead of getting "$2" passed into somefunc, I want "test"
// (i.e. the result of the regex)
str = str.replace(/(\$)([a-z]+)/gi, somefunc("$2"));
Вот так:
str.replace(regex, function(match, $1, $2, offset, original) { return someFunc($2); })
Передайте функцию как второй аргумент в replace
:
str = str.replace(/(\$)([a-z]+)/gi, myReplace);
function myReplace(str, group1, group2) {
return "+" + group2 + "+";
}
Эта возможность существует со времен Javascript 1.3, в соответствии с mozilla.org.
Примечание.. В предыдущем ответе отсутствовал некоторый код. Теперь он исправлен + пример.
Мне нужно что-то более гибкое для замены регулярного выражения для декодирования юникода в моих входящих данных JSON:
var text = "some string with an encoded 's' in it";
text.replace(/&#(\d+);/g, function() {
return String.fromCharCode(arguments[1]);
});
// "some string with an encoded 's' in it"