match() gibt array mit zwei Treffern beim ich erwarte ein Spiel
Betrachten Sie das folgende Beispiel:
<html>
<body>
<script type="text/javascript">
var str="filename.jpg";
var pattOne = new RegExp('\.[^\.]*$');
var pattTwo = new RegExp('(\.[^\.]*$)');
var pattThree = new RegExp('(\.[^\.]*$)', 'g');
document.write(str.match(pattOne));
document.write('<br>');
document.write(str.match(pattTwo));
document.write('<br>');
document.write(str.match(pattThree));
</script>
</body>
</html>
Hier ist das Ergebnis:
.jpg
.jpg,.jpg
.jpg
Erwarte ich dieses Ergebnis:
.jpg
.jpg
.jpg
Warum platzieren von Klammern um den regulären Ausdruck ändert sich das Ergebnis? Warum mit " g " - Modifikator ändert sich wieder das Ergebnis?
InformationsquelleAutor der Frage Vasil | 2012-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom
- String.der Prototyp.match
[MDN]:Wo die
RegExp.der Prototyp.exec
- Dokumentation [MDN] sagt:So, wie Sie eingeführt eine Aufnahme-Gruppe im zweiten Ausdruck, ist das erste element ist das ganze match und der zweite enthält den Inhalt des capture-Gruppe, die, in deinem Beispiel ist das gesamte Spiel als gut.
Der erste Ausdruck nicht über eine Aufnahme-Gruppe, so erhalten Sie nur zurück das match.
Zurück zu den
match
Dokumentation:Mit der
g
Modifikator, nur Treffer werden zurückgegeben, aber nicht der Inhalt des capture-Gruppen. In Ihrem string es ist nur ein Spiel.InformationsquelleAutor der Antwort Felix Kling
Den
.match()
Funktion gibt ein array zurück.document.write()
gedruckt array als string.Wenn Sie erfasst eine Gruppe in der Zeichenkette macht es ein Array wie dieses:
Also mit dem regex wird es:
Ist und wenn Sie drucken ein array setzt es eine
,
zwischen den Werten.InformationsquelleAutor der Antwort Wouter J