Javascript: передача функции со спичками для замены (regex, func (arg)) не работает
В соответствии с этим сайтом должен работать следующий метод замены, хотя я скептически отношусь.
http://www.bennadel.com/blog/55-Using-Methods-in-Javascript-Replace-Method.htm
Мой код выглядит следующим образом:
text = text.replace(
new Regex(...),
match($1) //$.. any match argument passed to the userfunction 'match',
// which itself invokes a userfunction
);
Я использую Chrome 14 и не передаю какие-либо параметры, переданные в соответствие функции?
Обновление
Он работает при использовании
text.replace( /.../g, myfunc($1) );
Переводчик JavaScript ожидает закрытия, - видимые пользовательские функции, похоже, приводят к проблемам с областью, то есть дальнейшие пользовательские функции не будут вызываться. Первоначально я хотел избегать замыканий, чтобы предотвратить потребление необходимой памяти, но есть уже гарантии.
Чтобы передать аргументы вашей собственной функции, сделайте это так (в котором аргумент [0] будет содержать все совпадение:
result= text.replace(reg , function (){
return wrapper(arguments[0]);
});
Кроме того, у меня возникла проблема в escape-последовательности строк и, следовательно, в выражении RegEx:
/\s......\s/g
не совпадает с
new Regex ("\s......\s" , "g")
или
new Regex ('\s......\s' , "g")
Поэтому будьте осторожны!
Ответы
Ответ 1
$1 должен находиться внутри строки:
"string".replace(/st(ring)/, "gold $1")
// output -> "gold ring"
с функцией:
"string".replace(/st(ring)/, function (match, capture) {
return "gold " + capture + "|" + match;
});
// output -> "gold ring|string"
Ответ 2
Я думаю, что вы ищете новый RegExp (шаблон, модификаторы).
http://www.w3schools.com/jsref/jsref_obj_regexp.asp