2010-05-03 7 views

Répondre

4

Il divise la chaîne sur | mais seulement si son suivi d'un caractère dans [a-zA-Z0-9_] et =>

Exemple:

Il fractionnera a|b=> sur la |

Il ne sera pas divisé a|b sur la |

7

L'expression régulière est contenue dans les barres obliques. Cela signifie

\|  # 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

Répartition de l'expression régulière:

  • / expression régulière délimiteur de début littéral
  • \| match de | dans la chaîne, | est un caractère spécial dans regex, donc \ est utilisé pour l'échapper
  • (?= Est une expression de lookahead, il vérifie pour voir si une chaîne suit l'expression sans apparier
  • \w=> correspond à toute chaîne alphanumérique (y compris _), suivie par =>
  • )/ marque la fin de l'expression d'anticipation et la fin de l'expression rationnelle

En bref, la chaîne sera divisée en | si elle est suivie par un caractère alphanumérique ou un trait de soulignement, puis =>.

0

Dans ce cas, le caractère de tuyau est échappé de sorte qu'il est traité comme un tuyau littéral. La division se produit sur les tubes suivis de tout caractère alphanumérique et '=>'.

Le '|' est également utilisé dans les expressions régulières comme une sorte d'opérateur OR. Par exemple:

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

Diviserait soit un caractère «k», un «i», un «tt» ou un «y».

0

Recadrage des caractères de délimitation, nous obtenons \|(?=\w=>)

  • | est un caractère spécial dans regex, il devrait donc être échappé avec une barre oblique inverse comme \|
  • (?=REGEX) est la syntaxe pour un look positif avant: matchs seulement si REGEX correspond, mais ne consomme pas la sous-chaîne correspondant REGEX. Le match jusqu'au REGEX ne fait pas partie du jeu de résultats correspondant. S'il avait été simple \|\w=>, la chaîne parentale serait divisée autour de |a=> au lieu de |.

Ainsi /\|(?=\w=>)/ correspond uniquement aux | caractères qui sont suivies par \w=>. Il correspond à |a=> mais pas |a>, || etc.

Tenir compte de la chaîne exemple de la question liée: a=>aa|b=>b||b|c=>cc. Si ce n'était pas pour le lookahead, split donnera un tableau de [a=>aa, b||b, cc]. Avec lookahead, vous obtiendrez [a=>aa, b=>b||b, c=>cc], qui est la sortie désirée.