2010-08-03 3 views
30

нужно заменить <wiki>this page</wiki> на <a href='wiki/this_page'>this page</a>
с помощью функции обратного вызова:заменить функцию обратного вызова спичек

text = text.replace(/<wiki>(.+?)<\/wiki>/g, function(match) 
    { 
     return "<a href='wiki/"+match.replace(/ /g, '_')+"'>"+match+"</a>"; 
    } 
); 

результат в том, что тег <wiki> сохраняется (полный матч) - <a href='wiki/<wiki>this_page</wiki>'><wiki>this page</wiki></a>

Есть ли способ, чтобы получить соответствует [0], соответствует [1], как в PHP preg_replace_callback()?

ответ

62

replace function's callback выполняет матчи в качестве параметров.

Например:

text = text.replace(/<wiki>(.+?)<\/wiki>/g, function(match, contents, offset, input_string) 
    { 
     return "<a href='wiki/"+contents.replace(/ /g, '_')+"'>"+contents+"</a>"; 
    } 
); 

(Второй параметр является первой группой захвата)

+1

работает. теперь я знаю, были ли ссылки на JavaScript – Qiao

+1

Я думаю, что ответ в порядке, но он слишком краток. Также порядок неправильных двух последних параметров функции сопоставления. См. Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter , где объясняется, что существует различное количество параметров, полученных функцией сопоставления, в зависимости от число «заключенных в скобки» [es] ». – user2367418

Смежные вопросы