2014-10-31 69 views
0

我想存储一些字符串,并检查来自textarea的字符串是否与存储的字符串相同。我决定从数组开始。检查数组匹配项的字符串并继续检查

var string = "something like this happens everyday in my life"; 

var array1 = [ 
    "thing", 
    "something" 
]; 

var array2 = [ 
    "happens", 
    "life" 
]; 

我知道了它是如何工作的一个字串:

if(string.search(array1) != -1) { 
    console.log("array1"); 
} 

if(!!~jQuery.inArray(string.search, array1)) { 
    console.log("array1"); 
} 

,但我需要的是这句话的每一个项目比较我的阵列,并获得每一场比赛。即使在一个阵列中有几个匹配。 请帮忙。

回答

1

检查字符串是否包含给定子字符串的最简单方法是使用.indexOf

var s = "Hello, how are you today? Is everything alright?" 
// if you want the search to be case insensitive: 
// s = s.toLowerCase(); 
var myWords = ["how", "everything"]; 
for (var i = 0; i < myWords.length; i++) { 
    var pos = s.indexOf(myWords[i]); 
    if (pos == -1) { 
     console.log("word", myWords[i], "not found."); 
    } else { 
     console.log("word", myWords[i], "found at position", i); 
    } 
} 

如果你想存储所有的比赛,你可以有一个

var matches = []; 

,并在else块下,有matches.push(myWords[i]);

如果您需要支持≤IE8,那么你可以使用下面的函数将字符串中搜索字符串:

var getPosition = function (s, word) { 
    var len = s.length, 
     wlen = word.length; 
    for (var i = 0; i < len - wlen + 1; i++) { 
     if (s[i] == word[0] && s.slice(i, i + wlen) == word) 
      return i; 
    } 
    return -1; 
} 

这可能是有用的,如果你不希望加载外部库,即jQuery或Polyfill,仅适用于indexOf

+0

注意'indexOf'不的一些版本中工作因此jQuery的替代 – NibblyPig 2014-10-31 17:41:32

+0

@SLC是的,它不工作≤IE8 – royhowie 2014-10-31 17:42:28

+0

谢谢。它的工作完美无瑕。 – one2gov 2014-10-31 17:44:44

0

现在我结束了对每个数组使用这个。余按Ctrl C/V这10次,为每一个 为(VAR I = 0;我< 阵列。长度;我++){

for (var i = 0; i < states.length; i++) { var pos = text.indexOf(states[i]); if (pos == -1) { console.log("word", states[i], "not found."); } else { $('#log').append("~STATE~" + "<br>"); } }