Zum besseren Verständnis wenden wir die drei Ausdrücke plus eine Erfassungsgruppe an und analysieren jedes Verhalten.
() Erfassungsgruppe - Der reguläre Ausdruck in der Klammer muss übereinstimmen, und die Übereinstimmung muss eine Erfassungsgruppe erstellen
(?:) Nicht erfassende Gruppe - Der reguläre Ausdruck in der Klammer muss übereinstimmen, erstellt jedoch keine erfassende Gruppe
(?=) positiver Blick nach vorne - behauptet, dass der reguläre Ausdruck übereinstimmen muss
(?!) negativer Blick nach vorne - behauptet, dass es unmöglich ist, den regulären Ausdruck zu erreichen
Lassen Sie uns beantragen q(u)i, um zu beenden . qstimmt mit q überein und die Erfassungsgruppe ustimmt mit u überein . Die Übereinstimmung innerhalb der Erfassungsgruppe wird genommen und eine Erfassungsgruppe wird erstellt. Also geht der Motor weiter i. Und ipasst auf i . Dieser letzte Matchversuch ist erfolgreich. qui wird abgeglichen und eine Erfassungsgruppe mit u erstellt.
Lassen Sie uns beantragen q(?:u)i, um zu beenden . Wieder qstimmt mit q überein und die nicht erfassende Gruppe ustimmt mit u überein . Die Übereinstimmung aus der nicht erfassenden Gruppe wird übernommen, aber die erfassende Gruppe wird nicht erstellt. Also geht der Motor weiter i. Und ipasst auf i . Dieser letzte Matchversuch ist erfolgreich. qui ist abgestimmt
Lassen Sie uns beantragen q(?=u)i, um zu beenden . Der Lookahead ist positiv und wird von einem weiteren Token gefolgt. Wieder qstimmt mit q und umit u überein . Auch hier muss die Übereinstimmung vom Lookahead verworfen werden, damit der Motor von ider Zeichenfolge zu u zurücktritt . Der Lookahead war erfolgreich, daher fährt der Motor fort i. Aber inicht mithalten können u . Dieser Matchversuch schlägt also fehl.
Lassen Sie uns beantragen q(?=u)u, um zu beenden . Der Lookahead ist positiv und wird von einem weiteren Token gefolgt. Wieder qstimmt mit q und umit u überein . Die Übereinstimmung vom Lookahead muss verworfen werden, damit der Motor von uder Zeichenfolge zurück zu u tritt . Der Lookahead war erfolgreich, daher fährt der Motor fort u. Und upasst auf u . Dieser Matchversuch ist also erfolgreich. qu ist abgestimmt
Lassen Sie uns beantragen q(?!i)u, um zu beenden . Auch in diesem Fall ist Lookahead positiv (weil ies nicht übereinstimmt) und wird von einem weiteren Token gefolgt. Wieder qstimmt mit q überein und istimmt nicht mit u überein . Die Übereinstimmung vom Lookahead muss verworfen werden, damit der Motor von uder Zeichenfolge zurück zu u tritt . Der Lookahead war erfolgreich, daher fährt der Motor fort u. Und upasst auf u . Dieser Matchversuch ist also erfolgreich. qu ist abgestimmt
Zusammenfassend geht es also um den wirklichen Unterschied zwischen Lookahead- und Nicht-Capturing-Gruppen, wenn Sie nur die Existenz testen oder das Match testen und speichern möchten. Erfassungsgruppen sind teuer, verwenden Sie sie also mit Bedacht.