Gibt es eine Möglichkeit, die (Start-) Zeichenpositionen innerhalb einer Zeichenfolge der Ergebnisse einer Regex-Übereinstimmung () in Javascript abzurufen?
javascript
regex
match
string-matching
stagas
quelle
quelle
re
als Variable und das Hinzufügen desg
Modifikators sind beide entscheidend! Andernfalls erhalten Sie eine Endlosschleife.undefined
. jsfiddle.net/6uwn1vof/2, das kein suchähnliches Beispiel wie Ihres ist.g
Flagge und es wird funktionieren. Damatch
es sich um eine Funktion des Strings handelt, nicht um den regulären Ausdruck, kann er nicht statusbehaftet sein. Daherexec
wird er nur so behandeltexec
(dh hat eine Indexeigenschaft), wenn Sie nicht nach einer globalen Übereinstimmung suchen ... denn dann spielt Statefulness keine Rolle .Folgendes habe ich mir ausgedacht:
quelle
match.index + match[0].length
funktioniert auch für die Endposition.match.index + match[0].length - 1
?.slice()
und eingenommen.substring()
. Inklusives Ende wäre 1 weniger, wie Sie sagen. (Seien Sie vorsichtig, dass inklusive normalerweise den Index des letzten Zeichens innerhalb des Spiels bedeutet, es sei denn, es ist ein leeres Spiel, bei dem es 1 vor dem Spiel ist und möglicherweise zu-1
Beginn außerhalb des Strings für ein leeres Spiel liegt ...)Aus den Dokumenten von developer.mozilla.org zur String-
.match()
Methode:Wenn Sie sich mit einem nicht globalen regulären Ausdruck befassen (dh kein
g
Flag in Ihrem regulären Ausdruck), hat der von zurückgegebene Wert.match()
eineindex
Eigenschaft ... Sie müssen lediglich darauf zugreifen.Hier ist ein Beispiel, das zeigt, wie es auch funktioniert:
Ich habe dies erfolgreich bis zum IE5 getestet.
quelle
Sie können die
search
Methode desString
Objekts verwenden. Dies funktioniert nur für das erste Spiel, aber ansonsten wird das getan, was Sie beschreiben. Beispielsweise:quelle
Hier ist eine coole Funktion, die ich kürzlich entdeckt habe. Ich habe sie auf der Konsole ausprobiert und sie scheint zu funktionieren:
Was zurückkam: "Rand 6 unten 13 links 18 Radius"
Das scheint also das zu sein, wonach Sie suchen.
quelle
arguments
die Position ist. Nicht "das zweite Argument". Die Funktionsargumente sind "vollständige Übereinstimmung, Gruppe1, Gruppe2, ...., Übereinstimmungsindex, vollständige Zeichenfolge, mit der verglichen wird"Dieses Element fn gibt gegebenenfalls ein Array von 0-basierten Positionen des Eingabeworts innerhalb des String-Objekts zurück
Versuchen Sie es jetzt
Sie können auch reguläre Ausdrücke eingeben:
Hier erhält man den Positionsindex des linearen Terms.
quelle
quelle
str.indexOf
Hier wird nur das nächste Vorkommen des von der Übereinstimmung erfassten Textes gefunden, der nicht unbedingt die Übereinstimmung ist. JS Regex unterstützt Bedingungen für Text außerhalb der Erfassung mit Lookahead. Zum BeispielsearchIndex("foobarfoobaz", "foo(?=baz)", true)
geben soll[6]
, nicht[0]
.In modernen Browsern können Sie dies mit string.matchAll () erreichen .
Der Vorteil dieses Ansatzes gegenüber
RegExp.exec()
ist, dass er nicht davon abhängt, dass der reguläre Ausdruck zustandsbehaftet ist, wie in der Antwort von @ Gumbo .quelle
oder
quelle