Search for all instances of a string inside a string

烈酒焚心 提交于 2019-11-29 01:46:05

Try something like:

var regexp = /abc/g;
var foo = "abc1, abc2, abc3, zxy, abc4";
var match, matches = [];

while ((match = regexp.exec(foo)) != null) {
  matches.push(match.index);
}

console.log(matches);

Here is a working function:

function allIndexOf(str, toSearch) {
    var indices = [];
    for(var pos = str.indexOf(toSearch); pos !== -1; pos = str.indexOf(toSearch, pos + 1)) {
        indices.push(pos);
    }
    return indices;
}

Use example:

> allIndexOf('dsf dsf kfvkjvcxk dsf', 'dsf');
[0, 4, 18]

I don't know if there's a built in function to do it. You could do it in a simple loop though:

function allIndexes(lookIn, lookFor) {
    var indices = new Array();
    var index = 0;
    var i = 0;
    while(index = lookIn.indexOf(lookFor, index) > 0) {
        indices[i] = index;
        i++;
    }
    return indices;
}

You can use indexOf('searchstring', ), using the index returned 'last time round' + 1 until you get -1 back.

Here's a regex way to do it:

function positions(str, text) {
  var pos = [], regex = new RegExp("(.*?)" + str, "g"), prev = 0;
  text.replace(regex, function(_, s) {
    var p = s.length + prev;
    pos.push(p);
    prev = p + str.length;
  });
  return pos;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!