Hier ist ein Regex, der in den meisten Regex-Implementierungen einwandfrei funktioniert:
(?<!filename)\.js$
Dies entspricht .js für eine Zeichenfolge, die mit Ausnahme von Dateiname.js mit .js endet
Javascript hat keinen regulären Ausdruck. Kann jemand einen alternativen regulären Ausdruck zusammenstellen, der das gleiche Ergebnis erzielt und in Javascript funktioniert?
Hier sind einige Gedanken, benötigt aber Hilfsfunktionen. Ich hatte gehofft, es nur mit einem regulären Ausdruck zu erreichen: http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
javascript
regex
Daniel
quelle
quelle
(?<=thingy)thingy
für positives Aussehen und(?<!thingy)thingy
für negatives Aussehen . Jetzt unterstützt es sie.Antworten:
^(?!filename).+\.js
funktioniert bei mirgetestet gegen:
Eine richtige Erklärung für diesen regulären Ausdruck finden Sie unter Regulärer Ausdruck, um mit Zeichenfolgen übereinzustimmen, die kein Wort enthalten.
Look Ahead ist seit Version 1.5 von Javascript verfügbar und wird von allen gängigen Browsern unterstützt
Aktualisiert , um mit filename2.js und 2filename.js übereinzustimmen, jedoch nicht mit filename.js
(^(?!filename\.js$).).+\.js
quelle
a.js
2filename.js
, der hier angegebene reguläre Ausdruck jedoch. Ein passenderer wäre^(?!.*filename\.js$).*\.js$
. Dies bedeutet, dass alle*.js
außer übereinstimmen*filename.js
.BEARBEITEN: Ab ECMAScript 2018 werden Lookbehind-Behauptungen (auch unbegrenzt) nativ unterstützt .
In früheren Versionen können Sie dies tun:
Dies macht explizit das, was der Lookbehind-Ausdruck implizit tut: Überprüfen Sie jedes Zeichen der Zeichenfolge, ob der Lookbehind-Ausdruck plus der reguläre Ausdruck danach nicht übereinstimmen, und lassen Sie erst dann zu, dass dieses Zeichen übereinstimmt.
Eine weitere Bearbeitung:
Es schmerzt mich zu sagen (zumal diese Antwort so sehr positiv bewertet wurde), dass es einen viel einfacheren Weg gibt, dieses Ziel zu erreichen. Es ist nicht erforderlich, den Lookahead bei jedem Charakter zu überprüfen:
funktioniert genauso gut:
quelle
2filename.js
. Mein Regex stimmt in genau den gleichen Fällen überein wie Ihr Beispiel-Regex.^(?!.*filename\.js$).*\.js$
funktionieren würde. Der Versuch, an Situationen zu denken, in denen die NC-Gruppe möglicherweise noch notwendig ist ...Angenommen, Sie möchten alle finden, denen
int
nicht Folgendes vorangestellt istunsigned
:Mit Unterstützung für negative Rückblicke:
Ohne Unterstützung für negative Rückblicke:
Grundsätzlich besteht die Idee darin, n vorhergehende Zeichen zu erfassen und Übereinstimmungen mit negativem Look-Ahead auszuschließen, aber auch die Fälle abzugleichen, in denen keine vorangestellten n Zeichen vorhanden sind. (wobei n die Länge des Rückblicks ist).
Also der fragliche Regex:
würde übersetzen zu:
Möglicherweise müssen Sie mit der Erfassung von Gruppen spielen, um die genaue Stelle der Zeichenfolge zu finden, die Sie interessiert, oder Sie möchten einen bestimmten Teil nicht durch etwas anderes ersetzen.
quelle
(?<!barna)(?<!ene)(?<!en)(?<!erne) (?:sin|vår)e?(?:$| (?!egen|egne))
zu(?!barna).(?!erne).(?!ene).(?!en).. (?:sin|vår)e?(?:$| (?!egen|egne))
dem macht der Trick für meine Bedürfnisse. Nur als weiteres "reales" Szenario. Siehe Link((?!unsigned ).{9}|^.{0,8})int
Wenn Sie nach vorne, aber nach hinten schauen können, können Sie zuerst die Zeichenfolge umkehren und dann einen Lookahead durchführen. Natürlich muss noch etwas Arbeit geleistet werden.
quelle
Dies ist eine äquivalente Lösung zu Tim Pietzckers Antwort (siehe auch Kommentare derselben Antwort):
Es bedeutet, Übereinstimmung
*.js
außer*filename.js
.Um zu dieser Lösung zu gelangen, können Sie überprüfen, welche Muster das negative Aussehen ausschließt, und dann genau diese Muster mit einem negativen Aussehen ausschließen.
quelle
Im Folgenden finden Sie eine positive JavaScript-Alternative, die zeigt, wie der Nachname von Personen mit 'Michael' als Vorname erfasst wird.
1) Angesichts dieses Textes:
Holen Sie sich eine Reihe von Nachnamen von Personen namens Michael. Das Ergebnis sollte sein:
["Jordan","Johnson","Green","Wood"]
2) Lösung:
3) Lösung prüfen
Demo hier: http://codepen.io/PiotrBerebecki/pen/GjwRoo
Sie können es auch ausprobieren, indem Sie das folgende Snippet ausführen.
quelle