在JavaScript中的长字符串中突出显示一组不区分大小写的子字符串

时间:2016-06-10 06:14:04

标签: javascript string

给定JavaScript中的长字符串,例如“Ruby on Rails”,以及像“ru ra”这样的输入字符串,你怎么能产生类似<strong>Ru</strong>by on <strong>Ra</strong>ils的东西,即 Ru 太阳神 ILS?

我的第一个想法是对每组字符串进行标记,并遍历两组标记,查找匹配项,并按照我的方式构造新的结果字符串。但是,我不确定这种方法有多高效,而且我经常有重复。例如,输入“ruby on r”将匹配“Ruby”两次,而“Rails”则匹配一次。

1 个答案:

答案 0 :(得分:0)

var original = "Ruby on Rails";
var find = "ru ra";
var posToAdd = [];
var newStr = [];
for (var i = 0; i < original.length; i++) {
    newStr.push(original.charAt(i));
}

find = find.split(" ");
for (var i = 0; i < original.length; i++) {
    for (var e = 0; e < find.length; e++) {
        if (original.substring(i, find[e].length + i).toLowerCase() == find[e].toLowerCase()) {
            posToAdd.push(i);
        }
    }
}
var count = 0;
for (var i = 0; i < posToAdd.length; i++) {
    newStr.splice(posToAdd[i] + count, 0, "<strong>");
    newStr.splice(posToAdd[i] + count + (find[i].length + 1), 0, "</strong>");
    count += 2;
}
var outputStr = "";
for (var i = 0; i < newStr.length; i++) {
    outputStr += newStr[i];
}
print(outputStr);