在数组中获取多个字符位置?

时间:2012-03-13 19:07:37

标签: javascript

我希望在数组中获得点和逗号的位置。

w.wer,广告

应该给出类似的东西:

[0] > 1
[1] > 5
[2] > 9

如何使用javascript完成此操作?

9 个答案:

答案 0 :(得分:4)

function getPositions(regex, str) {
    var counts = [], m;
    while (m = regex.exec(str)) {
        counts.push(regex.lastIndex - m[0].length);
    }
    return counts;
}

// Usage:
getPositions(/[,.]/g, 'w.wer,ads,'); // => [1,5,9]

答案 1 :(得分:3)

尝试以下

var getAllIndexesOf = function(str, toFind) {
  var all = [];
  for (var i = 0; i < str.length; i++) {
    if (toFind.indexOf(str[i]) >= 0) {
      all.push(i);
    }
  }
  return all;
}

var result = getAllIndexsOf("w.wer,ads,", [".", ","]);

答案 2 :(得分:2)

选项1

只需遍历字符串中的每个字符:

var myString = "w.wer,ads,";
var matchedIndexes = [];

for (var i = 0; i < myString.length; i++) {
    if (myString[i] == "," || myString[i] == ".") {
        matchedIndexes.push(i);
    }
}

这是a working fiddle

选项2

如果你想更喜欢它,你可以创建一个对象,在该位置存储这个角色:

var myString = "w.wer,ads,";
var matchedIndexes = [];

for (var i = 0; i < myString.length; i++) {
    if (myString[i] == "," || myString[i] == ".") {
        matchedIndexes.push(new myMatch(myString[i], i));
    }
}

function myMatch(position, character) {
    this.position = position;
    this.character = character;
}

<强>结果:

Fancy Result     

这是a working fiddle

答案 3 :(得分:1)

function dotsAndCommas(s) {
  var rv = [];
  for (var i = 0; i < s.length; ++i) {
    if (s[i] === '.' || s[i] === ',') rv.push(i);
  }
  return rv;
}

基本上就是这样做。我没有想到用正则表达式做的快捷方式。

答案 4 :(得分:1)

可能不理想,但作为一个思想实验,这里有一种方法可以使用内置的javascript函数(没有显式循环):

var pos = mystr.split(/[,.]/).slice(0,-1).map(function(val, i, a) { return a.slice(0, i+1).join('').length+i; });

演示:http://jsfiddle.net/jtbowden/hHSB2/

摆脱.slice()的嵌套O(n^2)

var pos = mystr.split(/[,.]/).slice(0,-1).map(function(val, i, a) { return a[i] = val.length+(a[i-1]||-1)+1; });

演示:http://jsfiddle.net/jtbowden/hHSB2/1/

而且,是的,它仍然是丑陋而毫无意义的。

答案 5 :(得分:1)

又一个几乎单行:

var q = [];
[].forEach.call('w.wer,ads,', function(v, i) { /[,.]/.test(v) ? q.push(i) : 0 } );
// q == [1,5,9]

答案 6 :(得分:0)

我会遍历字符串并检查每个字符,如下所示:

    var s = "w.wer,ads,";

    var arr = new Array();

    for( var i = 0; i < s.length; i++ ) {

    if( s.charAt(i) == "." || s.charAt(i) == "," )
        arr.push(i);
    }

    for( var i = 0; i < arr.length; i++ ) {
        document.write( arr[i] );
    }

答案 7 :(得分:0)

由于已经有5个解决方案,我会写几乎一行的。

function dotsAndCommasPositions(str) {
    var i = -1;
    return str.split(/[.,]/).slice(0, -1).map(function(s){ return i += s.length + 1; });
};

答案 8 :(得分:0)

您可以创建一个循环遍历所有字符的函数,并保存.,的索引。

​function getPositionsOfDotsCommas(str) {
    var result = [];

    for (var i = 0; i < str.length; i++) {
        if (str[i] === '.' || str[i] === ',') {
            result.push(i);
        }        
    }

    return result;
}​