2013-03-10 40 views
6

Tôi có một mảng với thẻ bắt đầu bằng # Twitter. Và tôi muốn lọc một chuỗi tw.text cho những hashtags và quấn từ trong một spanJavascript: Văn bản Thay thế cho nhiều chuỗi trong mảng?

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

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

Làm thế nào tôi sẽ làm điều đó?

Cảm ơn bạn trước.

Trả lời

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

Điều này không tính đến các thẻ có chứa các thẻ khác có thể dẫn đến thay thế trùng lặp.

+0

Tuyệt vời, cảm ơn bạn, cũng có cách đơn giản để kiểm tra phiên bản "chữ hoa" của các từ không? Giống như 'HOME, CAR, TREE'? – matt

+0

Tôi nghĩ bạn có thể sử dụng 'RegExp mới (' # '+ elem,' i ') 'và sau đó' .replace (regexp,' # \ 0 ') ' –

3

tôi sẽ xây dựng một regex để làm thay thế như thế này ...

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

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

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

Regex kết thúc lên được #(thing|another|etc...) vì vậy tất cả thay thế được thực hiện bằng một đường chuyền.

+0

Cảm ơn bạn, xem nhận xét của tôi về câu trả lời khác. Trong một rex kiểm tra cho các phiên bản chữ hoa tinh khiết nên được dễ dàng hơn tôi đoán. Tuy nhiên tôi không có ý tưởng làm thế nào để? – matt

+0

Cảm ơn bạn, đó là 'i' – matt

+0

, công tắc' i' làm cho trường hợp regex không nhạy cảm, có nghĩa là nó khớp với 'HoMe' và' home' và 'HOME'. Bạn sẽ thêm cờ vào tham số thứ hai, đã đặt 'g' cho cờ toàn cục, khi xây dựng regex ...' new RegExp ('...', 'gi') ' –

Các vấn đề liên quan