作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试找出循环遍历字符串并查找特定字母的所有索引的最有效方法。
我已使用 $word_or_phrase.indexOf( $letter );
找到一个字母的单个索引,但该字母多次出现在 $word_or_phrase
中。最有效的方法是构建一个包含所有索引的数组,直到 .indexOf
返回 -1 吗?或者你会建议我如何找到所有索引?
我已经花时间发现了这个: Javascript str.search() multiple instances
这行得通,但对我来说,在处理超过 2 个索引时似乎效率不高。如果我有 10 个呢?
提前感谢您的建议!
最佳答案
如您发布的 StackOverflow 链接中的答案所示,您可以使用 indexOf
的第二个参数来定义搜索在字符串中的起始位置。您可以使用此技术继续遍历字符串,以获取所有匹配子字符串的索引:
function getMatchIndexes(str, toMatch) {
var toMatchLength = toMatch.length,
indexMatches = [], match,
i = 0;
while ((match = str.indexOf(toMatch, i)) > -1) {
indexMatches.push(match);
i = match + toMatchLength;
}
return indexMatches;
}
console.log(getMatchIndexes("asdf asdf asdf", "as"));
演示: http://jsfiddle.net/qxERV/
另一种选择是使用正则表达式来查找所有匹配项:
function getMatchIndexes(str, toMatch) {
var re = new RegExp(toMatch, "g"),
indexMatches = [], match;
while (match = re.exec(str)) {
indexMatches.push(match.index);
}
return indexMatches;
}
console.log(getMatchIndexes("asdf asdf asdf", "as"));
演示: http://jsfiddle.net/UCpeY/
还有另一种选择是手动遍历字符串的字符并与目标进行比较:
function getMatchIndexes(str, toMatch) {
var re = new RegExp(toMatch, "g"),
toMatchLength = toMatch.length,
indexMatches = [], match,
i, j, cur;
for (i = 0, j = str.length; i < j; i++) {
if (str.substr(i, toMatchLength) === toMatch) {
indexMatches.push(i);
}
}
return indexMatches;
}
console.log(getMatchIndexes("asdf asdf asdf", "as"));
关于javascript - 循环遍历字符串以查找多个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16897772/
我是一名优秀的程序员,十分优秀!