2013-03-10 19 views
6

Ho un array con gli hashtag di Twitter. E voglio filtrare una stringa tw.text per quelle hashtags e avvolgere le parole in un spanJavascript: testo Sostituisci per più stringhe nell'array?

var hashtags = new Array("home","car", "tree"); 

tw.text.replace('#home', '<span class="hash">#home</span>') 

Come potrei farlo?

Grazie in anticipo.

risposta

4
hashtags.forEach(function (elem) { 
    tw.text = tw.text.replace('#' + elem, '<span class="hash">#' + elem + "</span>"); 
}); 

Questo non tiene conto di tag che contengono altri tag che potrebbero portare a una sostituzione duplicata.

+0

Perfetto, grazie, c'è anche un modo semplice per verificare la versione "maiuscola" delle parole? Ti piace 'HOME, CAR, TREE'? – matt

+0

Penso che potresti usare 'nuovo RegExp ('#' + elem, 'i')' e poi '.replace (regexp, ' # \ 0')' –

3

vorrei costruire una regex per fare le sostituzioni come questo ...

var hashtags = new Array("home","car", "tree"); 

var rex = new RegExp("#("+hashtags.join("|")+")",'g') 

tw.text.replace(rex, '<span class="$1">#$1</span>') 

Regex finisce per essere #(thing|another|etc...) così tutte le sostituzioni sono fatte in un solo passaggio.

+0

Grazie, vedi il mio commento sull'altra risposta. In un rex il controllo per la versione maiuscola pura dovrebbe essere più facile credo. Tuttavia non ho idea di come? – matt

+0

Grazie, è 'i' – matt

+0

beh, l'opzione' i' rende il case regex insensibile, il che significa che corrisponde a 'HoMe' e' home' e 'HOME'. Dovresti aggiungere la bandiera al secondo parametro, che già imposta 'g' per la bandiera globale, quando costruisci la regex ...' nuovo RegExp ('...', 'gi') ' –

Problemi correlati