我希望在数组中获得点和逗号的位置。
w.wer,广告
应该给出类似的东西:
[0] > 1
[1] > 5
[2] > 9
如何使用javascript完成此操作?
答案 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);
}
}
选项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;
}
<强>结果:强>
答案 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;
}