2010-08-03 22 views
30

tenga que sustituir <wiki>this page</wiki> a <a href='wiki/this_page'>this page</a>
usando la función de devolución de llamada:reemplazar la función de devolución de llamada con fósforos

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

resultado es que la etiqueta <wiki> se conserva (partido completo) - <a href='wiki/<wiki>this_page</wiki>'><wiki>this page</wiki></a>

¿Hay una manera de conseguir coincide con [0], coincide con [1] como en el preg_replace_callback() de PHP?

Respuesta

62

El replace function's callback toma las coincidencias como parámetros.

Por ejemplo:

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

(El segundo parámetro es el primer grupo de captura)

+1

de trabajo. ahora sé que si la referencia de JavaScript es – Qiao

+1

, creo que la respuesta es correcta, pero es demasiado breve. También el orden de los dos últimos parámetros para la función de coincidencia parece ser incorrecto. Consulte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter donde se explica que hay una cantidad variable de parámetros recibidos por la función de coincidencia en función de el número de "submatch entre paréntesis". – user2367418

Cuestiones relacionadas