44 Stimmen

Wie kann ich ein Regex-Muster abgleichen, aber ausschließen?

Ich habe diese URL:

http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&snap=true&jlkj=kjhkjh&

Und dieses Regex-Muster:

cID=[^&]*

Dies führt zu diesem Ergebnis:

cID=87B6XYZ964D293CF

Wie entferne ich die "cID="?

Gracias

38voto

Kerry Jones Punkte 21572

Sie können entweder lookbehind verwenden (nicht in Javascript):

(?<=cID=)[^&]*

Sie können auch die Gruppierung verwenden und die erste Gruppe auswählen:

cID=([^&]*)

19voto

polygenelubricants Punkte 362173

Im Allgemeinen haben Sie mindestens 3 Möglichkeiten, um so etwas zu erreichen:

  • Verwenden Sie Lookarounds, damit Sie genau das erfassen können, was Sie erfassen wollen
    • Leider kein Lookbehind in Javascript
  • Erfassungsgruppe verwenden, um bestimmte Zeichenfolgen zu erfassen
    • Nahezu universelle Unterstützung in allen Geschmacksrichtungen
  • Wenn alles andere fehlschlägt, können Sie immer noch eine substring des Spiels
    • Funktioniert gut, wenn die Länge des zu kappenden Präfix/Suffix eine bekannte Konstante ist

Referenzen


Beispiele

Angesichts dieses Teststrings:

i have 35 dogs, 16 cats and 10 elephants

Dies sind die Übereinstimmungen einiger Regex-Muster:

Sie können z. B. auch mehrere Erfassungen vornehmen:

  • (\d+) (cats|dogs) ergibt 2 Übereinstimmungsergebnisse ( siehe auf rubular.com )
    • Ergebnis 1: 35 dogs
      • Gruppe 1 erfasst 35
      • Gruppe 2 fängt ein dogs
    • Ergebnis 2: 16 cats
      • Gruppe 1 erfasst 16
      • Gruppe 2 fängt ein cats

9voto

gnarf Punkte 103284

Mit JavaScript sollten Sie eine Erfassungsgruppe (setzen Sie den Teil, den Sie erfassen wollen, in () ) in Ihrem regulären Ausdruck

var url = 'http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&snap=true&jlkj=kjhkjh&';

var match = url.match(/cID=([^&]*)/);
// ["cID=876XYZ964D293CF", "876XYZ964D293CF"]

// match[0] is the whole pattern
// match[1] is the first capture group - ([^&]*)
// match will be 'false' if the match failed entirely

4voto

cherouvim Punkte 31201

Durch die Verwendung von Erfassungsgruppen:

cID=([^&]*)

und erhalten dann $1:

87B6XYZ964D293CF

2voto

David A Moss Punkte 239

Hier ist der Javascript-Code:

 var str = "http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&snap=true&jlkj=kjhkjh&";
    var myReg = new RegExp("cID=([^&]*)", "i");
    var myMatch = myReg.exec(str);
    alert(myMatch[1]);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X