Ich möchte etwas wie folgt aus:Wie erhalten Sie alle Indizes eines Musters in einer Zeichenfolge?
"abcdab".search(/a/g) //return [0,4]
Ist es möglich?
Ich möchte etwas wie folgt aus:Wie erhalten Sie alle Indizes eines Musters in einer Zeichenfolge?
"abcdab".search(/a/g) //return [0,4]
Ist es möglich?
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]
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"));
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 - #$*%
+1 für eine clevere Verwendung einer '.replace()' -Funktion. – jfriend00
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/
Warum der Downvote? – jfriend00
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);
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);
}
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
ich die RegExp exec Methode mögen. – kennebec