2016-01-03 45 views
3

我試圖在包含@char的單詞周圍添加span標籤+ classname。在字符串內部添加標籤+類名

我目前的一段代碼只會返回一個真正的值,如果它被發現,不幸的是我不知道如何添加標籤+ classname。什麼是正確的方法來做到這一點?

var string = "hello @peter how are you?", substring = "@"; 
    if (string.indexOf(substring) > -1){ 
    //add span tag + classname around @peter 

    } 

endresult應變量改成這樣:

var string = "hello <span class='mentioned'>@peter</span> how are you?" 
+1

其他[**託尼小馬**](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self -contained-tags#answer-1732454),這似乎是[** this **]的副本(http://stackoverflow.com/questions/12824928/jquery-wrapping-a-string-that-matches-a -regex) – adeneo

回答

2

一種選擇是使用.replace()方法。表達式(@\S+)是一個捕獲組,它與字面上的@字符匹配,後跟一個或多個非空白字符。由於$1代表第一個捕獲組,所以該匹配被簡單地替換爲<span class='mentioned'>$1</span>,其實質上包裝了該匹配。

var string = "hello @peter how are you?"; 
string = string.replace(/(@\S+)/g, "<span class='mentioned'>$1</span>"); 

// "hello <span class='mentioned'>@peter</span> how are you?" 

然而,根據不同的輸入,它實際上可能只是更好地使用\w而非\S。這樣做時,只有字符[A-Za-z0-9_]會匹配(而不是所有以外的任何非空白字符)。

例如:

var string = "hello @peter97... how are you?"; 
string = string.replace(/(@\w+)/g, "<span class='mentioned'>$1</span>"); 

// "hello <span class='mentioned'>@peter97</span>... how are you?"