JavaScript: передача функции с соответствиями для замены (регулярное выражение, func (arg)) не работает - PullRequest
14 голосов
/ 25 августа 2011

Согласно этому сайту должен работать следующий метод замены, хотя я скептически отношусь. 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, и мне не передаются параметры, переданные функции match?

Обновление

Работает при использовании

text.replace( /.../g, myfunc($1) );

Интерпретатор JavaScript ожидает закрытия , - кажущиеся пользовательские функции, кажется, приводят к проблемам области действия, то есть дальнейшие пользовательские функции не будут вызываться. Первоначально я хотел избежать замыканий, чтобы предотвратить необходимое потребление памяти, но уже есть защитные меры.

Чтобы передать аргументы своей собственной функции, сделайте это так (где аргумент [0] будет содержать полное совпадение:

result= text.replace(reg , function (){
        return wrapper(arguments[0]);
});

Кроме того, у меня была проблема в экранировании строк и, следовательно, в выражении RegEx, как показано ниже:

/\s......\s/g

не совпадает с

new Regex ("\s......\s" , "g") или
new Regex ('\s......\s' , "g")

так что будьте осторожны!

Ответы [ 2 ]

48 голосов
/ 25 августа 2011

$ 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"
0 голосов
/ 25 августа 2011

Я думаю, что вы ищете новый RegExp (шаблон, модификаторы).

http://www.w3schools.com/jsref/jsref_obj_regexp.asp

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