Wie csv Zeichenfolge suchen und ein Spiel zurückkehren, indem Sie einen Javascript regex

StackOverflow https://stackoverflow.com/questions/1204485

  •  05-07-2019
  •  | 
  •  

Frage

Ich versuche, den ersten Benutzer rechts von Semikolon getrennte Zeichenfolge zu extrahieren, die einem Muster entspricht.

Benutzerrechte werden im Format gespeichert:     LAA;LA_1;LA_2;LE_3;

String ist leer, wenn der Benutzer keine Rechte hat.

Meine beste Lösung so weit ist die folgende regex in Regex.Replace Anweisung zu verwenden:   .*?;(LA_[^;]*)?.*

(Das Fragezeichen am Ende der Gruppe ist für die Zwecke der die ganze Zeile, falls Benutzer passenden hat nicht das Recht und ersetzen sie durch leere Zeichenkette zu signalisieren, dass sie es nicht haben.)

Allerdings funktioniert es nicht richtig, falls rechts die gesuchte ist in der ersten Position:   LA_1;LA_2;LE_3;

Es ist einfach, es zu beheben, indem nur ein Semikolon am Anfang der Zeile vor regex Hinzufügen ersetzen, aber meine Frage ist, warum es nicht die folgende Regex?

.*?(?:(?:^|;)(LA_[^;]*))?.*

Ich habe zahlreiche andere reguläre Ausdrücke versucht, die Lösung zu finden, aber bisher ohne Erfolg.

War es hilfreich?

Lösung

Ich bin nicht sicher, ob ich Ihre Frage richtig, aber in Bezug auf die regulären Ausdrücke, die Sie verwenden, werden Sie sie ohne ersichtlichen Grund (zumindest nicht für mich) overcomplicating. Vielleicht wollen Sie so etwas wie:

function getFirstRight(rights) {
  var m = rights.match(/(^|;)(LA_[^;]*)/)
  return m ? m[2] : "";
}

Andere Tipps

Sie könnten nur die Zeichenfolge aufgeteilt zuerst:

function getFirstRight(rights)
{
    return rights.split(";",1)[0] || "";
}

die spezifische Frage zu beantworten? „Warum nicht die folgenden regex es passen“, ein Problem ist die Mischung aus diesem am Anfang:

.*?

schließlich gefolgt von:

^|;

Welche sein könnte wie wenn man sagt, überspringen alle zusätzlichen Zeichen, bis Sie entweder den Start oder ein Semikolon erreichen. Aber man kann nicht über etwas überspringt und dann später zu Beginn kommen (es sei denn, es Zeilenumbrüche in einem mehrzeiligen String beinhaltet).

So etwas wie dies funktioniert:

.*?(\bLA_[^;]).*

Bedeutung, überspringen Zeichen, bis eine Wortgrenze, gefolgt von "LA _".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top