2016-04-16 5 views
0

Ich habe ein Textdokument hier: http://regexr.com/3d7t5Regex: Wie zeichne ich drei Ziffern innerhalb einer Zeichenfolge, aber nicht den Rest der Zeichenfolge?

Mit Javascript (NodeJS), ich brauche die dreistellige Zahl in jedem der Sätze entsprechen, die mit C. O. starten : Das heißt, 001, 003, 036, etc

ich versucht habe, nicht-einfangenden Gruppen verwenden, aber aus irgendeinem Grund meine Abfrage funktioniert nicht:

/([0-9]+)(?:C.O.   : \d\d\d)?/g 
+0

Mögliche Duplikat [Regex mit Hilfe von JavaScript nur Zahlen zurückzukehren] (http://stackoverflow.com/questions/1183903/regex-using-javascript-to-return-just-numbers) – Tigger

+0

Wie Sie sich bewerben diese Regex spezifisch? Ich meine, wie benutzt du es? Durch 'match()'? – acdcjunior

+0

@Tigger nein, komplexer – quelquecosa

Antwort

0

Wenn Sie nur wollen 3 Ziffern dann übereinstimmen

/\d{3}/gm

ist alles was Sie brauchen. Aber ich denke, Sie benötigen etwas wie:

/^C\.O\..*?(\d{3})/gm

oder

/^C\.O\..*?:\s*(\d{3})/gm

Sie spielen und basteln mit den oben Regexes here und here.


Wie es turns out quelquecosa ausgelassen ein oder-zwei "Kleinigkeiten".

/^\|\s+C\.O\.\s+:\s+(\d{3})/gm

Example here:

Die Regex sollte wohl so etwas wie sein.

Dies entspricht 009 und 011 im folgenden Text, aber nicht Total C.O. ....

+---------------------------------------------------------------------------------------------------------------------------------------+ 
| UNO - VER 8.5.                   HORA : 5:56 PM | 
|                             PAGINA:   14 | 
|                                  | 
| Empresa   : MA                         | 
| C.O.   : 009 PALMIRA2 OUTLET             Fecha Inicial : 2016/04/16 Hora Inicial:  | 
| Tipo Inventario : 6 ETIQUETAS Y BOLSAS            Fecha Final : 2016/04/16 Hora Final :  | 
+---------------------------------------------------------------------------------------------------------------------------------------+ 
|GRUPO    DESCRIPCION       U.M.  CANTIDAD   BRUTO DESCUENTOS  IMPUESTOS  T O T A L | 
+---------------------------------------------------------------------------------------------------------------------------------------+ 
01     CLASIFICACION DANE     UNI   45.000 ** OBSEQUIO ** 
----------------------------------------------------------------------------------------------------------------------------------------- 
Total Inventario ETIQUETAS Y BOLSAS        45.000    0    0    0    0 
Total Inventario ETIQUETAS Y BOLSAS        45.000    0    0    0    0 
----------------------------------------------------------------------------------------------------------------------------------------- 
Total C.O.   PALMIRA2 OUTLET            1,001,346    0  160,254  1,161,600 
Total C.O.   PALMIRA2 OUTLET            1,001,346    0  160,254  1,161,600 
+---------------------------------------------------------------------------------------------------------------------------------------+ 
| UNO - VER 8.5.                   HORA : 5:56 PM | 
|                             PAGINA:   15 | 
|                                  | 
| Empresa   : MA                         | 
| C.O.   : 011 CARTAGO               Fecha Inicial : 2016/04/16 Hora Inicial:  | 
| Tipo Inventario : 3 PRODUCTO TERMINADO            Fecha Final : 2016/04/16 Hora Final :  | 
+---------------------------------------------------------------------------------------------------------------------------------------+ 
|GRUPO    DESCRIPCION       U.M.  CANTIDAD   BRUTO DESCUENTOS  IMPUESTOS  T O T A L | 
+---------------------------------------------------------------------------------------------------------------------------------------+ 
01     CLASIFICACION DANE     UNI   26.000  853,537  225,943  100,415  728,009 
----------------------------------------------------------------------------------------------------------------------------------------- 
Total Inventario PRODUCTO TERMINADO        26.000  853,537  225,943  100,415  728,009 
Total Inventario PRODUCTO TERMINADO        26.000  853,537  225,943  100,415  728,009 
+0

Sie haben Recht mit der nicht einfangenden Gruppe; Ich habe das aktualisiert. Der Rest ist alles bis zu Quelquecosa; die Frage/das gewünschte Verhalten ist nicht genau klar. – RobIII

+0

Rechts ... 'C.O.X123' wird jedoch trotzdem gefunden. – Lucero

+0

@RobIII, ich brauche nur die 3-stellige Nummer, nicht die ganze Phrase – quelquecosa

1

Verwenden Sie dieses Muster:

/\bC\.O\.   : (\d\d\d)\b/g 

Führen Sie dann eine exec in der Zeichenfolge aus und nehmen Sie den Inhalt der ersten Erfassungsgruppe.

var rx = /\bC\.O\.   : (\d\d\d)\b/g 
 
var s = "C.O.   : 001 CALI\nC.O.   : 003 MIAMI\nC.O.   : 026 TEXAS"; 
 
for (var m = rx.exec(s); m; m = rx.exec(s)) { 
 
    document.write(m[1]+' '); 
 
}

Edit: Wenn die Anzahl und Art von Leerzeichen variieren kann, können Sie natürlich anpassen die Regex, dies auch zu handhaben:

/\bC\.O\.\s*:\s*(\d\d\d)\b/g 
+1

Warum ersetzen Sie nicht die Leerzeichen mit '\ s *', und Ziffern mit '\ d {3}'? –

+0

@JamesBuck Da ich angenommen habe, dass die Phrase genau mit dem Muster übereinstimmen muss, und nicht irgendein Text, der mit "C.O.gefolgt von einem Doppelpunkt und einer dreistelligen Zahl. – Lucero

+0

'* Ich nahm an, dass der Ausdruck genau mit dem Muster übereinstimmen muss.' 'Dann hätte ich immer noch etwas wie' \ s {12} 'verwendet, weil das Leerzeichen in Ihrer Regex schwer zu sehen/zu ändern/zu quantifizieren ist; Ich wäre für etwas wie '/^C\.O \. \ S {12}: \ s (\ d {3})/g' gegangen. – RobIII

Verwandte Themen