2016-07-15 31 views
1

Wie extrahiere ich 12:05 AM von 7/16/2016 12:05:00 AM mit Regex?Erhalte Zeit von Datum und Uhrzeit mit Regex

ich gemacht habe es bis hierher

test = "7/16/2016 12:05:00 AM" 
test.match(/^(\S+) (.*)/)[2] 
> "12:05:00 AM" 

aber ich kann nicht herausfinden, wie die Sekunden zu entfernen. Außerdem, wenn es eine einfachere/effizientere Art gibt, das zu tun, was ich versuche, lass es mich wissen.

würde ich eher nicht wie moment.js

auf Bibliotheken von Drittanbietern verlassen

HINWEIS: Meine gewünschte Ausgabe 12:05 AM ist und nicht nur 12:05

+0

Suche nach dem ersten Doppelpunkt (:) und retrive die 2 Zeichen vor und nach ihm. – ClearBoth

Antwort

3

Suchen Sie explizit nach den Ziffern und dem Doppelpunkt und trennen Sie die letzten beiden ab, bevor Sie mit Ihrem am/pm übereinstimmen. Wir machen auch die zweite Stunde Ziffer optional, falls wir passen nur gegen „15.14.16“:

var test = "7/16/16 12:05:00 AM"; 
var matches = test.match(/(\d\d?:\d\d):\d\d(\s[ap]m)/i); 
var time = matches && (matches[1] + matches[2]); 
// time === "12:05 AM" 

Just for Fülle von Regex zu beachten, können Sie auch geschweifte Klammern verwenden, um Bestimmen Sie die Anzahl der zu zählenden Ziffern (ich oben nicht, weil es mehr Zeichen am Ende ist, wenn es nur 1-2 ist). Sowohl die folgende und oben wird die gleiche Zeichenfolge übereinstimmen:

var matches = test.match(/(\d{1,2}:\d{2}):\d{2}(\s[ap]m)/i; 
+1

Sie können wollen '(\ d {1,2}: \ d {2})' als Ihre erste Gruppe ...die Tatsache, dass die Zeit das Suffix am/pm trägt, legt nahe, dass es möglicherweise keine führende "0" als "03:14:16" gibt, es wäre wahrscheinlich "3:14:16" –

+0

@StephenP Messepunkt; hat die Antwort angepasst. Vielen Dank. – rgthree

+0

Danke! Ich habe es nach dem Vorschlag von @ StephenP aufgeräumt: 'test.match (/ (\ d {1,2}: \ d {2}): \ d {2} (\ s [ap] m)/i) ; ' – Katie

1

Dies ist ein einfacher Weg:

var time = test.split(' ')[1] 
time = time.substring(0, time.length - 3)+' '+test.split(' ')[2] 

Auch, wenn Sie mit Datum und Uhrzeit arbeiten müssen, würde ich empfehlen Moment.js

moment(test).format('h:mm A') 
+1

Sie haben vergessen, die AM am Ende zurück zu setzen :) – Confiqure

+0

Oh, du hast Recht! Danke :) –

2

Eine einfache und kurze Alternative ist, die Teile passen Sie tun nicht möchten, und ersetzen Sie sie durch leere Strings.

test.replace(/^\S*\s*|:\d\d(?!:)/g, "") 

Erläuterung:

  • ^\S*\s* - passt das Datum und den ersten Raum
  • :\d\d(?!:) - passt die Sekunden und vor dem Doppelpunkt es; der negative Lookahead verhindert, dass das Muster den Minuten entspricht
  • g - 'global' Flag; brauchen das, weil wir zwei Spiele haben werden
  • ersetzt

Probieren Sie es hier:

window.go = function() { 
 
    var input = document.getElementById("input").value; 
 
    var output = input.replace(/^\S*\s*|:\d\d(?!:)/g, ""); 
 
    document.getElementById("output").value = output; 
 
};
<input id="input" value="7/16/2016 12:05:00 AM"> 
 
<button onclick="go()">Click me!</button> 
 
<input id="output">