2013-06-05 45 views
0

我想解析一大塊文本來查找所有匹配的關鍵字。javascript:找到一個字符串中的所有匹配關鍵字

我有一個數組中的所有關鍵字。

爲如:

var string = "hi, I need support for apple, android and nokia phones."; 

var keywords = ['apple', 'nokia', 'android']; 

for(i=0;i<keywords.length; i++){ 
    var match = string.match(keywords[i]); 
    console.log(match); 
} 

這是一種對於現在的工作。只是尋找更好和有效的解決方案。

+1

這個問題會更適合我們的[Code Review](http://codereview.stackexchange.com/)姊妹網站。 –

+0

將您的關鍵字組合成正則表達式。 – freakish

+1

'string.match(new RegExp(「\\ b」+ keywords [i] +「\\ b」,「」)添加一個\ b的單詞邊界對於匹配單詞而不是子字符串非常重要(同上不區分大小寫) gi「));'假設關鍵字中沒有任何內容需要轉義(如果不需要計數匹配,則更好,不包含'g') –

回答

2

正如@freakish所說,將它們組合成一個正則表達式更有效率(給定一個體面的正則表達式引擎)。當然,這要求比賽不要重疊,如果你需要這樣的比賽,你必須一一測試。

var match = string.match(new RegExp(keywords.join("|"), "g")); 
+0

這個作品,但如果字符串包含多個關鍵字會給我重複的匹配。我應該循環並刪除重複? –

+0

所以你只想知道每個關鍵字是否至少出現一次?不清楚你的問題。 – Bergi

+0

是的。 :) –

0

單程;不區分大小寫,完整的單詞,沒有du;;

var string = "hi, I need support for apple, android and nokia phones."; 

var keywords = ['apple', 'nokia', 'android']; 
var results = []; 
for(var i = 0; i < keywords.length; i++) { 
    if ((new RegExp("\\b" + keywords[i] + "\\b", "i").test(keywords[i]))) { 
     results.push(keywords[i]); 
    } 
} 

alert("contains: " + results); 
+0

是的,我想到了這個解決方案。我想知道如果我們只用一個正則表達式就可以完成它。你怎麼看? –

+0

可能,但我看不到如何在單個表達式中完成,同時抑制重複。每個術語的循環將仍然如此之快,以致不可知 –

+0

好的。如何與dups一個正則表達式。然後我們循環結果去除dups。這會快速通過多個正則表達式嗎? –

相關問題