Получить позиции подстрок перед заменой - PullRequest
1 голос
/ 15 июня 2011

Если у меня есть строка foo bar foo baz foo и я хочу заменить foo на abcd, я хочу получить смещения замененных вхождений в строке ([0, 8, 16] в этом примере).Как я могу получить эти позиции?

Ответы [ 3 ]

3 голосов
/ 16 июня 2011
var getPositions = function(str, sub) {
  var arr=[], idx=-1;
  while ((idx=str.indexOf(sub,idx+1)) > -1) {
    arr.push(idx);
  }
  return arr;
};

getPositions('foo bar foo baz foo', 'foo'); // => [0, 8, 16]
2 голосов
/ 16 июня 2011

Рассматриваете ли вы использовать регулярные выражения? Таким образом, вам не придется возиться с поиском местоположения частей foo. Если вам абсолютно необходимы должности, это решение не для вас.

var str = 'foo bar foo baz foo';
str = str.replace(/foo/g,'abcd');
alert(str);
2 голосов
/ 16 июня 2011

Если я понимаю, что вы после этого, это должно работать для вас

var getPositions = function (find, str) {
    var arr = [],
        pos = 0,
        flen = find.length,
        len = str.length, i;

    while (pos < len) {
        i = str.indexOf(find, pos);

        if (i !== -1) {
            arr.push(i);
            pos = i + flen;
        } else {
            return arr.length ? arr : false;
        }
    }
    return arr.length ? arr : false;
};

Тогда назовите это как getPositions("foo", whateverString);

http://jsfiddle.net/pyVaQ/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...