javascript
2010-08-03 21 views 30 likes 
30

<a href='wiki/this_page'>this page</a>
değerini geri arama işlevini kullanarak değiştirmelidir:geri arama işlevini eşleşme ile değiştir

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

sonucu <wiki> etiketi korunur (tam eşleme) - <a href='wiki/<wiki>this_page</wiki>'><wiki>this page</wiki></a>

Eşleşme elde etmenin bir yolu var mı [0], eşleşmeler [ 1] PHP'nin preg_replace_callback()'unda olduğu gibi?

cevap

62

replace function's callback eşleşmeleri parametreler olarak alır. Örneğin

:

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

(ikinci parametre birinci yakalama grubudur)

+1

çalışma. şimdi biliyorum JavaScript referansı – Qiao

+1

olduğunu düşünüyorum cevabı tamam, ama çok kısa. Ayrıca, eşleşen iki işlevin son iki parametresinin sırası yanlış görünüyor. Bkz. Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter Burada, eşleşen işlevin bağlı olarak değişen sayıda parametresi bulunduğunu açıklar. "parenthesized submatch [es]" sayısı. – user2367418

İlgili konular