Je développe actuellement Un petit outil qui me permet de convertir Github Wikis en pages Github. Maintenant, j'essaie d'ajouter un bon soutien aux tables de marquage (non pris en charge par l'analyseur que j'utilise). P>
Maintenant, je raccroche à la lexère d'un parseur puis l'étendez avec divers suppression spécifiques de GitHub Wiki (liaisons), puis transmettez les jetons modifiés à l'analyseur. Les tables doivent également correspondre à ce schéma. Mes modifications utilisent divers modèles de regex et remplacer les regibles de regex afin d'effectuer les modifications dont j'ai besoin. P>
Je suis un peu coincé avec la syntaxe de table compliquée, cependant. Vous pouvez trouver un exemple de ce ici a> et ici . Comme vous pouvez le constater, il y a une certaine structure, mais certaines parties sont entièrement facultatives. P>
J'en ai réfléchi et je pense que je voudrais une regex qui me produirait un groupe contenant l'en-tête (première ligne), les données d'alignement de la colonne (deuxième ligne) et le contenu réel en tant que groupes distincts. Il devrait contenir au moins une ligne de contenu afin de correspondre. Les données d'en-tête et d'alignement doivent également obéir à certaines règles comme indiqué sur les exemples. P>
Comment approcheriez-vous de construire une regex comme celle-ci? Mieux encore, quelqu'un peut-il me fournir un point de départ où construire? Il est possible que mon approche soit erronée (peut-être que la regex peut être évitée?). Si tel est le cas, toutes les idées menant aux mêmes résultats plus facilement sont appréciées. P>
4 Réponses :
J'ai fini par sauter à la fibex et je viens de le pirater ensemble en utilisant une logique conventionnelle. Il pourrait ne pas être aussi joli ni court comme une regex basée sur une regex mais au moins je peux le maintenir facilement. P>
J'ai trouvé des regexes qui auraient pu correspondre à cet objectif BTW. Voir Multimarkdown . P>
J'ai besoin d'une solution de regex dans le même problème. Voici ce que j'ai jusqu'ici, le mettre à jour au fur et à mesure de la mise à jour car je suis capable de l'améliorer: Démo debuggex < / p> Testé avec p>
JavaScript code> p> p>
C'est une regex effrayante. :)
Je vais juste laisser tomber ceci: ((\ | [^ | \ r \ r \ n] *) + \ | (\ r? \ N | \ r)?) + Code> ici, comme un autre Réponse à une telle vieille question n'en vaut pas la peine. Ou, si vous vous souciez des groupes de capture:
(?: (?: \ | [^ | \ r \ n] *) + \ | (?: \ r? \ R)?) + Code>
Pourquoi ce n'est pas la réponse approuvée? C'est ce qui a fonctionné pour moi avec javascript code>. Mais je viens de supprimer un personnage d'échappement inutile qui cause des erreurs d'Eslint et qui fonctionne bien.
quelque chose que j'ai fait: p>
-Modificateurs - Global, Multiline P>
Ceci est la table, pour analyse. P>
[|]? (\ S + [A-ZA-Z0-9 -_ * # @ $%:;?!., \ / \\] + \ s +) [|]? [|] ? (\ s + [a-za-z0-9 -_ * # @ $%:;?!., \ / \\] + \ s +) [|]? [|]? (\ S + [A-ZA- Z0-9 -_ * # @ $%:;?!.., \ / \\] + \ s +) [|]? \ r? \ n? \ |: - +: \ |: - +: \ | | ?:: +: \ |? code>
-MODIFICATEUR - GLOBAL P>
\ |: - +: \ |?: - +: \ | ?:: +: \ |? \ r? \ N? Code>
- Modificateur - Global P>
[|]? (\ S + [A-ZA-Z0-9 -_ * # @ $%:;?!., \ / \\] + \ s +) [|]? [|] ? (\ s + [a-za-z0-9 -_ * # @ $%:;?!., \ / \\] + \ s +) [|]? [|]? (\ S + [A-ZA- Z0-9 -_ * # @ $%:;?!.., \ / \\] + \ s +) [|]? \ r? \ n? code> p> p> p> P>
| Tables | Sont | Cool |
|: ---------------: | :------------: | :----: |
| Col 3 est | R-L | 1600 $ |
| Col 2 est | centré | 12 $ |
| rayures zébrées | sont soignés | 1 $ |
code> p>
Merci pour la regex: je l'ai utilisé dans un parseur de markdown, Slimdown-JS , qui Convertit la table en HTML.
J'ai eu le même problème et je n'ai jamais trouvé de réponse appropriée, j'ai finalement proposé ce qui suit.
^(\|[^\n]+\|\r?\n)((?:\|:?[-]+:?)+\|)(\n(?:\|[^\n]+\|\r?\n?)*)?$
| code> et la ligne "Alignements cellulaires" est correctement formatée. LI>
- Le premier groupe capture la "tête", le deuxième groupe La ligne "Alignements cellulaires" et le troisième groupe (facultatif) capture le "corps". li>
- Il a besoin d'au moins une cellule "alignement" complétée et correctement formatée pour le considérer comme une table, mais correspondra aux tables incomplètes autrement (c'est-à-dire sans "corps"). Li>
ul>
Testé en Java (Android) et ici: P>
Regex101 p>
et ici: P>
J'espère que cela aide quelqu'un. :) p> p>