2010-08-03 10 views
30

necessario sostituire <wiki>this page</wiki>-<a href='wiki/this_page'>this page</a>
utilizzando la funzione di callback:sostituire funzione di callback con i fiammiferi

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

risultato è che tag <wiki> si conserva (full match) - <a href='wiki/<wiki>this_page</wiki>'><wiki>this page</wiki></a>

C'è un modo per ottenere corrisponde a [0], corrisponde a [1] come in PHP preg_replace_callback()?

risposta

62

Il replace function's callback prende le corrispondenze come parametri.

Ad esempio:

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

(Il secondo parametro è il primo gruppo di cattura)

+1

lavoro. ora so che il riferimento JavaScript è – Qiao

+1

Penso che la risposta sia ok, ma è troppo breve. Anche l'ordine degli ultimi due parametri per la funzione di corrispondenza sembra essere errato. Vedere https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter dove si spiega che vi è un numero variabile di parametri ricevuti dalla funzione di abbinamento a seconda di il numero di "submatch parentesi [es]". – user2367418

Problemi correlati