2014-10-31 91 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>"); } }