根据javascript中的单词计数突出显示单词

时间:2016-11-08 04:06:57

标签: javascript regex string replace

如果我有以下字符串:This is another song you should listen to 我试图编写一个函数,只根据单词计数突出显示单词。例如,我想使用如下方法突出显示第4个单词:highlightWord(originalString,nthWord)。返回的字符串将是:

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

我尝试使用我编写的highlightMatch函数,一个是通过传递搜索字符串(regexMatch = "is"),但问题是它突出显示This而不是is }:

function highlightMatch(originalValue,regexMatch) {
    var tempInnerHTML = stripTags(originalValue);
    originalValue.innerHTML = tempInnerHTML.replace(regexMatch,'<span class="highlighted">'+regexMatch+'</span>');
}

我也尝试过使用这个highlightNthWord方法:

function highlightNthWord(string,n) {
    var m = string.match(new RegExp('^(?:\\w+\\W+){' + n + '}(\\w+)'));
    return m && '<b>'+m[1]+'</b>';
}

但是这个只返回突出显示的第n个单词,而不是突出显示第n个单词的整个句子。 我希望只坚持使用javascript(没有jquery)。

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

试试这个

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