2012-03-31 11 views

Antwort

6

Sie can use die RegExp#exec Methode mehrmals:

var regex = /a/g; 
var str = "abcdab"; 

var result = []; 
var match; 
while (match = regex.exec(str)) 
    result.push(match.index); 

alert(result); // => [0, 4] 

Helper function:

function getMatchIndices(regex, str) { 
    var result = []; 
    var match; 
    regex = new RegExp(regex); 
    while (match = regex.exec(str)) 
     result.push(match.index); 
    return result; 
} 

alert(getMatchIndices(/a/g, "abcdab")); 
+0

ich die RegExp exec Methode mögen. – kennebec

5

Sie könnten/verwenden missbrauchen die replace function:

var result = []; 
"abcdab".replace(/(a)/g, function (a, b, index) { 
    result.push(index); 
}); 
result; // [0, 4] 

Die Argumente der Funktion sind als folgt:

function replacer(match, p1, p2, p3, offset, string) { 
    // p1 is nondigits, p2 digits, and p3 non-alphanumerics 
    return [p1, p2, p3].join(' - '); 
} 
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer); 
console.log(newString); // abc - 12345 - #$*% 
+0

+1 für eine clevere Verwendung einer '.replace()' -Funktion. – jfriend00

0

Sie können alle Spiel-Indizes wie diese:

var str = "abcdab"; 
var re = /a/g; 
var matches; 
var indexes = []; 
while (matches = re.exec(str)) { 
    indexes.push(matches.index); 
} 
// indexes here contains all the matching index values 

Arbeiten Demo hier: http://jsfiddle.net/jfriend00/r6JTJ/

+0

Warum der Downvote? – jfriend00

1

Eine nicht regex Sorte:

var str = "abcdabcdabcd", 
    char = 'a', 
    curr = 0, 
    positions = []; 

while (str.length > curr) { 
    if (str[curr] == char) { 
     positions.push(curr); 
    } 
    curr++; 
} 

console.log(positions); 

http://jsfiddle.net/userdude/HUm8d/

2

Wenn Sie nur einfache Zeichen oder Zeichenfolgen finden möchten, können Sie indexOf[MDN] verwenden:

var haystack = "abcdab", 
    needle = "a" 
    index = -1, 
    result = []; 

while((index = haystack.indexOf(needle, index + 1)) > -1) { 
    result.push(index); 
} 
+0

Wenn man nur nach Vorkommen eines einzelnen Zeichens sucht, wäre dies ein sehr einfacher Weg, es zu tun und wahrscheinlich besser als die Regex. – jfriend00

Verwandte Themen