2011-12-12 28 views
0

我想爲子字符串分析一個字符串,並返回子字符串的位置(如果發現它)。查找各種子字符串並返回找到的那個位置

function analize(t) { 
    if (t.indexOf(" a ") > -1 || t.indexOf(" b ") > -1 || t.indexOf(" c ") > -1) { 
     alert(t.indexOf(" a ")); 
     } 

問題是我正在尋找多個子字符串,我不能回顯它的位置,因爲我不知道發現了哪個子字符串。雖然這個例子只有3個字符串,但我需要在代碼中做更多的事情。我如何檢查各種物品並返回找到的物品的位置?

+2

分析一個字符串?真? – Anurag

+0

如果找到多個匹配項,您希望它做什麼? –

回答

2

使用正則表達式與String.search

var position = t.search(/ a | b | c /); 

這很容易如果你的字符串列表是不變的,你可以編碼。但是如果你的列表是動態的,你必須以編程方式構建正則表達式。你可以這樣做:

var searchStrings = [" a ", " b ", " c "].map(function (item) { 
    return item.replace(/[*+?^$.\[\]{}()|\\\/]/g, "\\$&"); // escape RegEx meta chars 
}); 
var position = t.search(new RegExp(searchStrings.join("|"))); 

請注意,我用上面的Array.map()。這在舊版瀏覽器中默認不起作用。您必須手動添加它。請參閱compatibility notes以獲取可用於在舊版瀏覽器中獲得此功能的實現。

+0

更好的答案。 –

+0

如果*爲*常數,'[abc]'或'(a | b | c)'可能不太重複。 – Ryan

-3

只是把你想要的字符串放在一個數組中,然後使用for-in循環遍歷每個字符串並輸出找到的位置。

function analyze(t) { 
    var strings = ["a","b","c"...]; 
    for(index in strings]) 
     if(t.indexOf(string[index]) > -1) 
     alert(t.indexOf(" a ")); 
} 
+2

-1。 *不*使用'for .. in'循環迭代一個數組。 – gilly3

+2

gilly3說什麼。還括號是你的朋友。 –

0

使用下列返回第一個匹配的位置:

function indexOfAny(strs, s) { 
    for (var i = 0; i < strs.length; i++) { 
     var ind = s.indexOf(strs[i]); 
     if (ind != -1) 
      return ind; 
    } 
    return -1; 
} 

indexOfAny(["a", "b", "c"], "test-b-stri-c-ng"); 

返回:

5 
+0

對於''test-c-stri-b-ng'',即使第一個匹配位於第5位,它也會返回12。 – gilly3

+0

是的,我的意思是數組中的第一個匹配。你顯然也可以用另一種方式來做。 –

相關問題