2016-06-22 23 views
2

Ich habe eine Zeichenfolge: strString = first,last,,4443334444Komma getrennt String Array mit regulären Ausdrücken

ich regulären Ausdruck zu spalten diese Zeichenfolge in ein Array verwenden möchten.

Ich verwende diesen regulären Ausdruck [\""].+?[\""]|[^,]+, aber es ignoriert den Raum nach dem Wort zuletzt. So

, mein Array sucht etwas wie folgt aus:

 [0] => first 
     [1] => last 
     [2] => 4443334444 

statt:

 [0] => first 
     [1] => last 
     [2] => 
     [3] => 4443334444 

Ich möchte den Raum halten.

Jede Hilfe wäre willkommen.

+1

Welche Sprache verwenden Sie? – Coder256

+2

Warum nicht einfach 'string.split (',')' '? – evolutionxbox

+0

@evolutionxbox: Weil es "Text, Text" 'falsch teilt. @TheGooose, versuche ['" [^ "\\] * (?: \\. [^" \\] *) * "| [^,] + | (? <=^|,) (? = $ | ,) '] (https://regex101.com/r/oI6kY9/1). –

Antwort

0

Ein paar Probleme mit Ihrem Ausdruck.

  1. Erste [\""] ist redundant, verwenden ["] oder besser " (ohne die Zeichenklasse ) statt.
  2. Zweitens Ihre eigentliche Problem ist aufgrund der + Betreiber, die mindestens ein Charakter (aber gibt es keine zwischen den Kommas, also leere Felder disallowing) erfordert.
  3. Drittens ist dies wahrscheinlich einige CSV Ausgang, also warum nicht explode() oder ähnliche Funktionen verwenden?


Wenn Sie darauf bestehen, einen regulären Ausdruck auf verwenden, können Sie zusammen mit bekommen:

".*?"|[^,]* 

a demo on regex101.com See.

0

Nicht sicher, ob es eine Möglichkeit gibt, das Element zwischen den zwei Kommas zu erhalten, da es keinen Regex-Ausdruck dafür gibt. Das Beste, was ich tun konnte, ist:

str.match (/ (?: [^] +) | ,,/g)

=> [ "first", "letzten", ",,", "4443334444"]

Aber Sie müssen das ",," in eine leere Zeichenfolge übersetzen.

Gibt es einen Grund, warum Sie Regex verwenden? Hat Ihre Sprache eine .split() Funktion?https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split

0

können Sie verwenden

"[^"\\]*(?:\\.[^"\\]*)*"|[^,]+|(?<=^|,)(?=$|,)‌​ 

Siehe regex demo

Der Ausdruck besteht aus

  • "[^"\\]*(?:\\.[^"\\]*)*" - einen doppelten Anführungszeichen Stringliteral mit Escape-Sequenz Unterstützung
  • | - oder
  • [^,]+-1 oder mehr andere Zeichen als ,
  • | - oder
  • (?<=^|,)(?=$|,)‌​ - jede leere Zeichenfolge, die entweder zwischen Kommata ist, oder zwischen dem Start/Ende der Schnur und einem Komma.