2013-08-17 372 views
2

我需要檢查一個主字符串中是否存在任何一組字符串。檢查字符串中是否存在多個字符串

目前我正在使用for循環檢查每個字符串。

有沒有一種簡單的方法,這樣的解決方案,其中紅寶石我遇到的 - How to compare a string against multiple other strings

["string1","string2","string3"].include? myString 
+0

正則表達式? 'RegExp(strings.join('|'))。test(myString)' – elclanrs

+0

不幸的是,這個字符串19將會返回true而不是string1,但是這會起作用:matchfound = RegExp(「^(」+ strings.join(「|」)+ 「)$」)測試(myString的); 基本上檢查^(string1 | string2 | string3)$而不是string1 | string2 | string3 –

回答

2

你的循環有多複雜?這是循環存在的。假設你的字符串的集合稱爲setOfStrings數組和你的主串是在一個名爲mainString變量:

var stringExists = false; 
for(var i =0;i < setOfStrings.length; i++){ 
    if(mainString.IndexOf(setOfStrings[i]) != -1) 
     stringExists = true; 
} 

它可能不是因爲你的Ruby構建的簡潔,而且它很該死常見。

2

一個做了一個小實驗,發現以下的罰款。唯一的開銷是爲數組的每個元素生成正則表達式。如果check爲零或以上,則找到其中一個字符串。

if (!('included' in Array.prototype)) { 
    Array.prototype.included = function() { 
    return arr.map(function (item) { 
     var regex = new RegExp(item, 'g'); 
     if (regex.test(str)) return true; 
     return false; 
    }).indexOf(true); 
    }; 
} 

要返回,而不是數字的布爾只是將其更改爲:

if (!('included' in Array.prototype)) { 
    Array.prototype.included = function() { 
    var regex, found = false; 
    for (var i = 0, l = this.length; i < l; i++) { 
     regex = new RegExp(this[i], 'g'); 
     if (regex.test(str)) { found = true; break; } 
    } 
    return found; 
    }; 
} 

var found = arr.included(str); 

這是我以前的答案的編輯,因爲我意識到我實際上並沒有回答的問題:)

+0

嗨安迪感謝,但我仍然有一些困難的正則表達式,所以實際上是尋找一個簡單的記住解決方案。 –

相關問題