给定JavaScript中的长字符串,例如“Ruby on Rails”,以及像“ru ra”这样的输入字符串,你怎么能产生类似<strong>Ru</strong>by on <strong>Ra</strong>ils
的东西,即 Ru 的太阳神 ILS?
我的第一个想法是对每组字符串进行标记,并遍历两组标记,查找匹配项,并按照我的方式构造新的结果字符串。但是,我不确定这种方法有多高效,而且我经常有重复。例如,输入“ruby on r”将匹配“Ruby”两次,而“Rails”则匹配一次。
答案 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);