2017-06-04 5 views
1

Ich habe ein paar Möglichkeiten versucht, dies zu tun, und ich kann nicht herausfinden, warum meine .Match immer Null zurückgibt. Wie kann ich den 04-Jun-2017 anhand der folgenden Zeichenfolge in seine eigene Variable extrahieren?Javascript extrahiert regulären Ausdruck aus Zeichenfolge

var str = "I need the only the date 04-Jun-2017\n" 

str.replace(/\n/g,' '); 
var date = str.match(/^[01][0-9]-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{4}$/); 
alert(date) 
+2

Die Anker entfernen. Siehe [diese Demo] (https://regex101.com/r/S1Myyy/1). Oder [Ersetzen durch Wortgrenzen] (https://regex101.com/r/j9EqhV/1). –

Antwort

3

Zu allererst str.replace(/\n/g,' '); verändert nicht str var da Strings unveränderlich sind. Dann brauchen Sie nicht die Anker ^ und $, da das Datum innerhalb der Zeichenfolge ist, ist es nicht gleich der Zeichenfolge selbst. Außerdem müssen Sie Tage von 1 bis 31, aber [01][0-9] nur Übereinstimmungen von 00 bis 19 übereinstimmen.

können Sie betrachten

var str = "I need the only the date 04-Jun-2017\n" 
 
var date = str.match(/\b\d{1,2}-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{4}\b/i); 
 
if (date) { 
 
    console.log(date[0]); 
 
}

Die Dübeln sind mit Wortgrenzen ersetzt \b und der Tag Teil in \d{1,2} passend irgendwelche 1 oder 2 Ziffern geändert. Der Modifikator i macht das Muster unabhängig von der Groß- und Kleinschreibung.

+1

Ihr Code ist genau das, was ich brauchte. Zu ehrlich gesagt wusste ich nicht einmal über \ b und habe sehr wenig Erfahrung mit der Regex. Ich werde sagen, ich hatte keine Ahnung, dass Strings unveränderlich sind, wie du es ausdrückst. Der Str.Replace (/ \ n/g, ''); Entfernt definitiv die neue Zeile. Meine eigene Lösung vor deinem war es, das \ n durch "" zu ersetzen, teile alles in Token mit .split ("") und gehe dann durch meine aufgebockte Regex hindurch und match. Unterm Strich ist dein Weg viel besser. –

0

Zuerst sollten Sie sich über Ihre Frage klar sein. Zweitens ist hier, was die

var str = "I need the only the date 04-Jun-2017\n" 
var result = str.replace('I need the only the ',''); 
alert(result); 

Siehe Antwort sein kann, wie die .replace(valueToSearch,valueToReplace) Funktion zwei Parameter benötigt, zuerst ist der Text, so zu ersetzen, was auch immer Sie setzen im Inneren für innerhalb der Zeichenkette suchen, der zweite Parameter ist die Wert, dass es ersetzt wird, so dass, wenn Sie es loswerden wollen, nur eine leere Zeichenfolge platzieren.

+0

Danke für die Antwort und du schreibst ich hätte das deutlicher schreiben sollen, stattdessen war es in Eile. Auch deine Antwort wird nicht funktionieren, da der Text, der das Datum umgibt, sich ändern wird (ich vermute, dass ich das nicht angegeben habe), daher musste ich mit der RegEx-Antwort gehen. –

Verwandte Themen