JavaScript - представьте regex обратные ссылки в виде строки

Вы можете обратная ссылка как это в JavaScript:

var str = "123 $test 123";
str = str.replace(/(\$)([a-z]+)/gi, "$2");

Это было бы (довольно глупая) замена "$test" с "тестом". Но предположите, что я хотел бы передать получившую строку 2$ в функцию, которая возвращает другое значение. Я пытался делать это, но вместо того, чтобы получить строку "тест", я получаю "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"));
90
задан quano 15 March 2010 в 14:50
поделиться

2 ответа

Вот так:

str.replace(regex, function(match, $1, $2, offset, original) { return someFunc($2); })
112
ответ дан 24 November 2019 в 07:05
поделиться

Передайте функцию в качестве второго аргумента replace :

str = str.replace(/(\$)([a-z]+)/gi, myReplace);

function myReplace(str, group1, group2) {
    return "+" + group2 + "+";
}

Согласно mozilla.org , эта возможность появилась с Javascript 1.3.

33
ответ дан 24 November 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: