gpt4 book ai didi

javascript - 循环遍历字符串以查找多个索引

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:25:37 29 4
gpt4 key购买 nike

我正在尝试找出循环遍历字符串并查找特定字母的所有索引的最有效方法。

我已使用 $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"));

演示: http://jsfiddle.net/KfJ9H/

关于javascript - 循环遍历字符串以查找多个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16897772/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com