查找各种子字符串并返回找到的那个位置
我想为子字符串分析一个字符串,并返回子字符串的位置(如果发现它)。查找各种子字符串并返回找到的那个位置
function analize(t) {
if (t.indexOf(" a ") > -1 || t.indexOf(" b ") > -1 || t.indexOf(" c ") > -1) {
alert(t.indexOf(" a "));
}
问题是我正在寻找多个子字符串,我不能回显它的位置,因为我不知道发现了哪个子字符串。虽然这个例子只有3个字符串,但我需要在代码中做更多的事情。我如何检查各种物品并返回找到的物品的位置?
使用正则表达式与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以获取可用于在旧版浏览器中获得此功能的实现。
更好的答案。 –
如果*为*常数,'[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 "));
}
-1。 *不*使用'for .. in'循环迭代一个数组。 – gilly3
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
对于''test-c-stri-b-ng'',即使第一个匹配位于第5位,它也会返回12。 – gilly3
是的,我的意思是数组中的第一个匹配。你显然也可以用另一种方式来做。 –
分析一个字符串?真? – Anurag
如果找到多个匹配项,您希望它做什么? –