2013-08-17 269 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

嗨安迪感谢,但我仍然有一些困难的正则表达式,所以实际上是寻找一个简单的记住解决方案。 –

相关问题