2017-01-16 1 views
2

ich eine Coldfusion Regex schrieb Tageszeiten entsprechen im Quellcode einer Seite, in der sie auf der ganzen Seite wie diese verstreut erscheinen:Kleine zwicken diese Regex, um es zu bekommen, um zu tun, was ich will

<span>10.30</span> stuff <span>10.45-11.15</span> other stuff <span>17.00</span> 

Ich möchte die Übereinstimmungen "10.30" "10.45-11.15" und "17.00" sein. Stattdessen bekomme ich "10.30" "10.45" "11.15" und "17.00".

Ich habe versucht:

rematch("(\b[0-2][0-9]\.[0-5][0-9]\b)|(\b[0-2][0-9]\.[0-5][0-9]-[0-2][0-9]\.[0-5][0-9]\b)",mystring) 

Danke meine Fehler zu korrigieren! Bestimmt etwas mit den kleinen B's und dem Bindestrich zu tun.

+0

ändern die Reihenfolge, zuerst die Bindestriche. Sie können dies auch in einer Erfassungsgruppe tun, https://regex101.com/r/udlyAS/2. – chris85

Antwort

2

Ich glaube nicht, dass Sie die 'oder' benötigen, nur den Bereich optional machen, wie folgt:

\b[0-2]\d\.[0-5]\d(-[0-2]\d\.[0-5]\d)?\b 

ist der JavaScript-Äquivalent-Schnipsel:

var re = /\b[0-2]\d\.[0-5]\d(-[0-2]\d\.[0-5]\d)?\b/g; 
 
var s = "<span>10.30</span> stuff <span>10.45-11.15</span> other stuff <span>17.00</span>"; 
 

 
console.log(s.match(re));

3

Sie können einfach den Teil des Musters, der dem zweiten Teil des Bereichs entspricht, mit Hilfe einer optionalen nicht einfangenden Gruppe (?:...)? erstellen und beachten, dass Ihr Regex auch bis zu 29 Stunden entspricht, die ebenfalls korrigiert werden können.

Verwenden

\b(?:2[0-3]|[0-1][0-9])\.[0-5][0-9](?:-(?:2[0-3]|[0-1][0-9])\.[0-5][0-9])?\b 

Siehe regex demo

Einzelheiten:

  • \b - führende Wortgrenze
  • (?:2[0-3]|[0-1][0-9]) - entweder 2 mit einer Ziffer gefolgt von 0 zu 3 oder 0/1 anschließend mit einer beliebigen Zahl (= Stunde)
  • \. - Literal dot
  • [0-5][0-9] - eine Ziffer zwischen 0 zu 5 mit einer beliebigen Zahl (= Minute), gefolgt
  • (?:-(?:2[0-3]|[0-1][0-9])\.[0-5][0-9])? - eine optionale nicht -Erfassungsgruppe, die mit - übereinstimmt und dann das gleiche oben beschriebene Muster gefolgt von ...
  • \b - eine nachlaufende Wortgrenze.
+0

Th * nks, Wiktor. (Ich sollte in dieser Box nicht "Danke" schreiben.) Ich habe Ihre Lösung zuerst getestet und es hat perfekt funktioniert. Gab Herrn Twoyears das grüne Häkchen, weil seine Lösung kurz und süß ist! Aber wo soll ich "Danke" sagen, wenn nicht in dieser Box? – Commata

+0

@ user1781623 Sie können den Pfeil neben der Antwort hier verwenden. Die "Up-Abstimmung" ist eine Art, einem Benutzer zu danken. http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow – chris85

+0

@ user1781623: Froh, dass es für Sie gearbeitet hat. Bitte denken Sie daran, ** diese ** Antwort dann zu akzeptieren (siehe [So akzeptieren Sie SO Antworten] (http: //meta.stackexchange.com/questions/5234/Wie-akzeptiert-eine-Antwort-Arbeit)). –

Verwandte Themen