2010-05-03 11 views

Antwort

4

die Zeichenfolge auf | spaltet aber nur, wenn seine in [a-zA-Z0-9_] von einem Zeichen gefolgt und =>

Beispiel:

Es a|b=> auf dem |

gespalten wird es nicht a|b auf die aufgespalten werden |

7

Der reguläre Ausdruck wird in den Schrägstriche enthalten. Es bedeutet

\|  # A pipe symbol. It needs to be scaped with a backslash 
      # because otherwise it means "OR" 
(?=  # a so-called lookahead group. It checks if its contents match 
      # at the current position without actually advancing in the string 
    \w=> # a word character (a-z, A-Z, 0-9, _) followed by => 
)   # end of lookahead group. 
1

Aufteilung des regulären Ausdrucks:

  • / regulären Ausdruck wörtlichen Startdelimiter
  • \| Spiel | im String ist | ein spezielles Zeichen in regex, so \ verwendet wird es zu entkommen
  • (?= Ist ein Lookahead-Ausdruck, überprüft es, ob zu sehen eine Zeichenkette, die den Ausdruck folgt, ohne durch =>
  • )/ markiert das Ende der Vorgriffs-Expression und das Ende des regex

Kurz gesagt es

  • \w=> stimmt mit einer alphanumerischen Zeichenfolge (einschließlich _), gefolgt passenden, Die Zeichenfolge wird auf | aufgeteilt, wenn auf ein alphanumerisches Zeichen oder einen Unterstrich gefolgt von => folgt.

  • 0

    In diesem Fall wird das Pipe-Zeichen als Escape-Zeichen behandelt, so dass es als Literal-Pipe behandelt wird. Die Aufteilung erfolgt bei Rohren, denen ein alphanumerisches Zeichen und "=>" folgen.

    Das '|' wird auch in regulären Ausdrücken als eine Art OR-Operator verwendet. Zum Beispiel:

    split(/k|i|tt|y/) 
    

    Würde auf entweder ein 'k', ein 'i', ein 'tt' oder ein 'y' Zeichen aufteilen.

    0

    die Begrenzungs Zeichen Trimmen, erhalten wir \|(?=\w=>)

    • | ein spezielles Zeichen in regex ist, so dass es mit einem Backslash als \|
    • (?=REGEX) ist Syntax für positiven Vorgriff entgangen sein sollte: paßt nur, wenn REGEX passt, aber nicht die Teilzeichenfolge, die REGEX entspricht. Die Übereinstimmung mit REGEX wird nicht Teil des übereinstimmenden Ergebnisses. Wäre es nur \|\w=> gewesen, würde die übergeordnete Zeichenfolge um |a=> statt | aufgeteilt werden.

    So /\|(?=\w=>)/ Matches nur die | Zeichen, die von \w=> befolgt werden. Sie paßt |a=> aber nicht |a>, || usw.

    das Beispiel Zeichenfolge aus der verknüpften Frage vor: a=>aa|b=>b||b|c=>cc. Wenn es nicht für den Lookahead gäbe, würde split ein Array von [a=>aa, b||b, cc] ergeben. Mit Lookahead erhalten Sie [a=>aa, b=>b||b, c=>cc], was die gewünschte Ausgabe ist.