2013-03-10 9 views
6

Mam tablicę z hashtagami na Twitterze. I chcę, aby filtrować ciąg tw.text dla tych hashtagami i owinąć słowa w spanJavaScript: Tekst Zastąpić wiele ciągów w tablicy?

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

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

Jak to zrobić?

Z góry dziękuję.

Odpowiedz

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

Nie uwzględnia znaczników zawierających inne znaczniki, które mogłyby doprowadzić do duplikowania zamiennika.

+0

Doskonałe, dziękuję, czy istnieje również prosty sposób sprawdzenia, czy słowa są "wielkimi literami"? Jak "DOM, SAMOCHÓD, DRZEWO"? – matt

+0

Myślę, że możesz użyć 'nowego RegExp ('#' + elem, 'i')', a następnie '.replace (regexp, ' # \ 0')' –

3

Chciałbym zbudować regex zrobić zamienników tak ...

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

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

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

Regex kończy się #(thing|another|etc...) więc wszystkie zamienniki są wykonywane w jednym przebiegu.

+0

Dziękuję, zobacz mój komentarz do drugiej odpowiedzi. W rexie sprawdzenie czystej wersji wielkimi literami powinno być łatwiejsze. Jednak nie mam pojęcia, jak? – matt

+0

Dziękuję, to 'i' – matt

+0

również, przełącznik' i' sprawia, że ​​wielkość regex jest niewrażliwa, co oznacza, że ​​pasuje do 'HoMe' i' home' i 'HOME'. Dodałbyś flagę do drugiego parametru, który już ustawia 'g' dla flagi globalnej, podczas budowania regex ...' new RegExp ('...', 'gi') ' –

Powiązane problemy