Ich habe HTML-Code vor und nach der Zeichenfolge:
name="some_text_0_some_text"
Ich möchte das 0
durch etwas ersetzen wie:!NEW_ID!
Also habe ich einen einfachen regulären Ausdruck gemacht:
.*name="\w+(\d+)\w+".*
Aber ich sehe nicht, wie ich ausschließlich den erfassten Block ersetzen soll.
Gibt es eine Möglichkeit, ein erfasstes Ergebnis wie ($ 1) durch eine andere Zeichenfolge zu ersetzen?
Das Ergebnis wäre:
name="some_text_!NEW_ID!_some_text"
javascript
regex
Nicolas Guillaume
quelle
quelle
$
zugegriffen werden kann. Das erste Wort(\w+)
befindet sich also in einer Gruppe und wird$1
, der mittlere Teil(\d+)
ist die zweite Gruppe (wird aber abgerufen) beim Ersetzen ignoriert), und die dritte Gruppe ist$3
. Wenn Sie also die Ersetzungszeichenfolge von"$1!new_ID!$3"
angeben, werden $ 1 und $ 3 automatisch durch die erste Gruppe und die dritte Gruppe ersetzt, sodass die zweite Gruppe durch die neue Zeichenfolge ersetzt werden kann, wobei der sie umgebende Text beibehalten wird.Jetzt, da Javascript (ab ES2018 ) anders aussieht , können Sie in neueren Umgebungen Gruppen in solchen Situationen vollständig vermeiden. Suchen Sie stattdessen nach dem, was vor der Gruppe kommt, die Sie erfasst haben, und suchen Sie nach dem, was kommt, und ersetzen Sie es durch nur
!NEW_ID!
:Bei dieser Methode ist die vollständige Übereinstimmung nur der Teil, der ersetzt werden muss.
(?<=name="\w+)
- Lookbehind forname"
, gefolgt von Wortzeichen (zum Glück müssen Lookbehinds in Javascript keine feste Breite haben!)\d+
- Eine oder mehrere Ziffern abgleichen - der einzige Teil des Musters, der sich nicht in einem Lookaround befindet, der einzige Teil der Zeichenfolge, der in der resultierenden Übereinstimmung enthalten ist(?=\w+")
- Suchen Sie nach Wortzeichen, gefolgt von"
`Denken Sie daran, dass Lookbehind ziemlich neu ist. Es funktioniert in modernen Versionen von V8 (einschließlich Chrome, Opera und Node), aber noch nicht in den meisten anderen Umgebungen , zumindest noch nicht. Während Sie Lookbehind in Node und in Ihrem eigenen Browser zuverlässig verwenden können (wenn es auf einer modernen Version von V8 ausgeführt wird), wird es von zufälligen Clients (wie auf einer öffentlichen Website) noch nicht ausreichend unterstützt.
quelle
\d+
, oder?match => match * 2
. Die Ziffern sind immer noch das ganze Spiel, daher sind keine GruppenEine kleine Verbesserung von Matthews Antwort könnte ein Lookahead anstelle der letzten Erfassungsgruppe sein:
Oder Sie können auf der Dezimalstelle teilen und sich wie folgt mit Ihrer neuen ID verbinden:
Beispiel / Benchmark hier: https://codepen.io/jogai/full/oyNXBX
quelle
Mit zwei Erfassungsgruppen wäre auch möglich gewesen; Ich hätte auch zwei Striche als zusätzliche linke und rechte Grenze vor und nach den Ziffern eingefügt, und der modifizierte Ausdruck hätte wie folgt ausgesehen:
RegEx Circuit
jex.im visualisiert reguläre Ausdrücke:
quelle
Eine einfachere Möglichkeit besteht darin, nur die Ziffern zu erfassen und zu ersetzen.
Ressourcen
quelle