Lieber Griever,
das <http://de.selfhtml.org/javascript/objekte/string.htm#match@title=SELFHTML-Beispiel zu String.match()> sollte Dir bei Deiner Funktion weiterhelfen. Achte insbesondere auf die Schleife...!
ich hatte wohl unsinnigerweise den Focus auf die Schleife gelegt, dabei hätte der Hinweis auf den Modifier "g" hinter dem Ausdruck hinweisen sollen, der "global" suchen lässt, sodass Du überhaupt eine Schleife sinnvoll bauen kannst.
mit /\b[(a-z)]\b/ gehts nicht
Und mit dem "g" am Ende? /\b\[(a-z)\]\b/g
Außerdem fällt mir auf, dass Du (a-z) notierst. Was soll das werden? Da Du die eckigen Klammern [] escapest, werden die Zeichen darinnen nicht als character class verstanden. Innerhalb der runden Klammern schon gleich garnicht. Die sind zum Merken da und merken sich genau das, was darinnen steht.
/(a-z)/g
findet also nur diese exakte Zeichenfolge "a-z" und merkt sich diese. Das, was Du willst, notiert man so: /[a-z]/g
Wenn Du Dir das [a-z] merken möchtest, dann musst Du es in eine Parenthese setzen, also runde Klammern darum notieren: /([a-z])/g
Da Deine Buchstaben ihrerseits in eckigen Klammern stehend gefunden werden sollen, brauchst Du diese natürlich auch, sonst findet Dein Ausdruck alles mögliche.
Neuer Versuch: /\[[a-z]\]/g
Jetzt findet dieser Ausdruck z.B. diese Vorkommen (ohne ihre Anführungszeichen): "[a]", "[x]", "[ß]" usw. Ich habe die runden Klammern deshalb nicht hinzugefügt, da diese nur innerhalb des Ausdrucks etwas bewirken, aber nicht das tun, was Du in PHP z.B. erwarten würdest (das gefunden-Array wird nicht automatisch mehrdimensional).
Nach Deinem ersten Post denke ich, dass Du eigentlich so ziemlich alles finden willst, was zwischen eckigen Klammern steht, oder wieso steht oben etwas von "[meinsmiley]"? Also passt der Ausdruck sowieso noch nicht perfekt.
Erneuter Versuch: /\[[^\]]+\]/g
Hier suche ich nach einer öffnenden eckigen Klammer. Danach notiere ich eine Character Class, in der folgendes steht: "finde mir beliebig viele Zeichen, die keine schließende eckige Klammer sind", also in Kurzform "^]", jedoch muss diese schließende eckige Klammer natürlich noch escaped werden, da sie sonst die Character Class vorzeitig beendet, daher "^]". Das Pluszeichen nach der Character Class findet beliebig viele Vorkommen, mindestens jedoch eines.
Fazit: Mit dem regulären Ausdruck /\[[^\]]+\]/g
findest Du alle Vorkommen der Art [irgendwas1236-sdfhü&$!], allerdings immer mit den umgebenden eckigen Klammern dazu. Diese bekommst Du über den regulären Ausdruck selbst nicht gleich weg, das wirst Du im weiteren Scriptverlauf (z.B. in der Schleife!) machen müssen.
Geprüftes Beispiel:
function checkIt() {
var teststring, gefunden, i;
teststring = "Gesucht werden spezielle Smilies: [a1], [x], [a%d]";
gefunden = teststring.match(/\[[^\]]+\]/g);
alert("Anzahl Fundstellen: "+gefunden.length);
for (i in gefunden) {
alert(
"Fund " + i + ": '" + gefunden[i] + "'"
+ "\n"
+ "Smiley: '" + gefunden[i].replace(/[\[\]]/g, "") + "'"
);
}
}
Liebe Grüße aus Ellwangen,
Felix Riesterer.
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)