Comment comprenez-vous des expressions régulières qui sont écrites dans une ligne?

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

  •  02-10-2019
  •  | 
  •  

Question

Ceci est une expression régulière bien documenté propre, facile à comprendre, maintenir et modifier.

    text = text.replace(/
    (                               // Wrap whole match in $1
        (
            ^[ \t]*>[ \t]?          // '>' at the start of a line
            .+\n                    // rest of the first line
            (.+\n)*                 // subsequent consecutive lines
            \n*                     // blanks
        )+
    )
    /gm,

Mais comment allez-vous travailler avec ces?

text = text.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm,

Y at-il un beautifier d'une sorte qui donne un sens et décrit sa fonctionnalité?

Était-ce utile?

La solution

RegexBuddy va "traduire" une regex pour vous. Lorsque nourri votre exemple regex, il affiche:

((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)

Options: ^ and $ match at line breaks

Match the regular expression below and capture its match into backreference number 1 «((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)»
   Match the regular expression below and capture its match into backreference number 2 «(^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+»
      Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
      Note: You repeated the capturing group itself.  The group will capture only the last iteration.  
          Put a capturing group around the repeated group to capture all iterations. «+»
      Assert position at the beginning of a line (at beginning of the string or after a line break character) «^»
      Match a single character present in the list below «[ \t]*»
         Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
         The character “ ” « »
         A tab character «\t»
      Match the character “>” literally «>»
      Match a single character present in the list below «[ \t]?»
         Between zero and one times, as many times as possible, giving back as needed (greedy) «?»
         The character “ ” « »
         A tab character «\t»
      Match any single character that is not a line break character «.+»
         Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
      Match a line feed character «\n»
      Match the regular expression below and capture its match into backreference number 3 «(.+\n)*»
         Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
         Note: You repeated the capturing group itself.  The group will capture only the last iteration.  
             Put a capturing group around the repeated group to capture all iterations. «*»
         Match any single character that is not a line break character «.+»
            Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
         Match a line feed character «\n»
      Match a line feed character «\n*»
         Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»

Ceci ne semble plutôt intimidant sous forme de texte, mais il est beaucoup plus facile à lire sous forme HTML (qui ne peut être reproduit ici) ou dans RegexBuddy lui-même. Il souligne également gotchas communs (tels que la répétition des groupes de capture qui est sans doute pas voulu ici).

Autres conseils

Il vaut la peine de devenir aptes à la lecture regexs sous la forme d'une ligne. La plupart du temps il y a écrit cette façon

J'aime Expresso

Après un certain temps, je me suis habitué à la lecture des choses. Il n'y a pas grand-chose à la plupart des expressions rationnelles, et je recommande le site http://www.regular-expressions.info/ si vous voulez les utiliser plus souvent.

Les expressions régulières sont juste un moyen d'exprimer des masques, etc. A la fin, il est juste un « langage » avec sa propre syntaxe.
Commentaire chaque bit de votre expression régulière serait la même chose que chaque ligne commentaire de votre projet.
Bien sûr, il aiderait les gens qui ne comprennent pas votre code, mais il est tout simplement inutile si vous (le développeur) comprends le sens de l'expression rationnelle.

Pour moi, la lecture des expressions régulières est la même chose que la lecture du code. Si l'expression est une explication très complexe ci-dessous pourrait être utile, mais la plupart du temps il ne faut pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top