2016-06-10 46 views
0

給定JavaScript中的一個長字符串(如「Ruby on Rails」)和輸入字符串(如「ru ra」),您如何生成類似<strong>Ru</strong>by on <strong>Ra</strong>ils的東西,即Ru作者:Ra ils?JavaScript中的長字符串中突出顯示不區分大小寫的子字符串集合

我的第一個想法是對每組字符串進行標記,並遍歷兩組標記,查找匹配項,並按照我所做的構建新的結果字符串。但是,我不確定這種方法的性能如何,我經常得到重複。例如,輸入「ruby on r」會匹配兩次「Ruby」,並且匹配一次「Rails」。

+0

你已經非常瞭解算法:解析文本節點的內容並分割成新的節點和span元素。您可能需要處理'R uby'中的匹配「ru」。 – RobG

回答

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); 
+0

srry for no indent:P – REVENTONMC

+0

使用http://jsbeautifier.org/在線代碼縮進;) –

+0

如果字符串爲空或不包含任何匹配項,則這些'.length'中的某些將會出錯。 –

相關問題