2016-11-08 147 views
0

如果我具有以下字符串:This is another song you should listen to 我試圖編寫一個函數以僅突出顯示基於單詞數的單詞。例如,我想使用如下方法突出顯示第4個單詞:highlightWord(originalString,nthWord)。返回的字符串是:根據javascript中的字數突出顯示單詞

This is another <span class=\"highlighted\">song</span> you should listen to

我試圖用一個highlightMatch功能是我寫的,一個通過將搜索字符串(regexMatch = "is"),但問題是,它強調的是在This而不是is

function highlightNthWord(string,n) { 
    var m = string.match(new RegExp('^(?:\\w+\\W+){' + n + '}(\\w+)')); 
    return m && '<b>'+m[1]+'</b>'; 
} 
function highlightMatch(originalValue,regexMatch) { 
    var tempInnerHTML = stripTags(originalValue); 
    originalValue.innerHTML = tempInnerHTML.replace(regexMatch,'<span class="highlighted">'+regexMatch+'</span>'); 
} 

我也是用這個方法highlightNthWord嘗試

但是,這隻返回突出顯示的第n個單詞,而不是第n個單詞突出顯示的整個句子。 我希望只堅持使用javascript(不jquery)。

+1

[使用'分裂()'和'加入( )'](https://jsfiddle.net/tusharj/wo6u1z82/1/) – Tushar

+0

肯定是矯枉過正,但我​​曾回答過類似的問題:http://stackoverflow.com/questions/15958020/variabl電子內-A-字符串內-A-串/ 15959797#15959797 – plalx

回答

1

您可以分割字符串是空格,然後生成字符串返回:

function highlightNthWord(string,n) { 
 
    var m = string.split(new RegExp(/\s+/)); 
 
    return m.splice(0, n-1).join(" ") + (' <b>'+m.splice(0, 1)+'</b> ') + m.join(" "); 
 
} 
 
console.log(highlightNthWord('This is another song you should listen to', 4))

0

試試這個

function highlightMatch(originalValue, matchString) { 
    var re = new RegExp(matchString, "igm"); 
    var replace = '<span class="highlighted">'+matchString+'</span>'; 
    return originalValue.replace(re ,replace); 
}