查找各种子字符串并返回找到的那个位置

问题描述:

我想为子字符串分析一个字符串,并返回子字符串的位置(如果发现它)。查找各种子字符串并返回找到的那个位置

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

问题是我正在寻找多个子字符串,我不能回显它的位置,因为我不知道发现了哪个子字符串。虽然这个例子只有3个字符串,但我需要在代码中做更多的事情。我如何检查各种物品并返回找到的物品的位置?

+2

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

+0

如果找到多个匹配项,您希望它做什么? –

使用正则表达式与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

只是把你想要的字符串放在一个数组中,然后使用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说什么。还括号是你的朋友。 –

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

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

是的,我的意思是数组中的第一个匹配。你显然也可以用另一种方式来做。 –