2009-07-29 6 views
0

Je commence à écrire une syntaxe de surlignage de code en JavaScript, et je veux mettre en évidence le texte entre guillemets (à la fois "s" et "s") dans une certaine couleur. ne pas être foiré par l'un d'un type de citation étant au milieu d'une paire des autres citations aussi, mais je ne sais pas vraiment par où commencer, je ne suis pas sûr de la façon dont je devrais aller trouver les citations puis trouver la fin de citation correcte.Trouver des citations de début et de fin

+0

Une expression régulière comme celle-ci pourrait-elle vous aider? http://stackoverflow.com/questions/249791/regexp-for-quoted-string-with-escaping -quotes –

Répondre

1

à moins que vous faites cela pour le défi, jetez un oeil à Google Code Prettify.

pour votre problème, vous pouvez lire sur parsing (and lexers) at Wikipedia. Il est un sujet très vaste et vous Vous constaterez que vous rencontrerez de plus gros problèmes ems que l'analyse des chaînes.

Pour commencer, vous pouvez utiliser des expressions régulières Une expression régulière typique pour faire correspondre une chaîne est (bien qu'ils ont rarement la précision d'un véritable lexer.):

/"(?:[^"\\]+|\\.)*"/ 

Et puis la même chose pour ' au lieu de ".

Sinon, pour un analyseur caractère par caractère, vous devez définir une sorte d'Etat que vous êtes dans une chaîne une fois que vous frappez ", lorsque vous frappez " qui n'est pas précédée d'une quantité inégale de antislashs (une quantité égale de barres obliques inverses s'échapperait l'une de l'autre), vous quittez la chaîne.

0

utilisation pile .. même si le prix sans équivalent trouvé pousser .. si correspondance trouvée pop

1

Vous pouvez trouver des citations en utilisant des expressions régulières, mais si vous écrivez un surligneur de syntaxe alors la seule façon fiable consiste à parcourir la code, caractère par caractère, et décidez quoi faire à partir de là.

E.g. d'un Regex

/("|')((?:\\\1|.)+?)\1/g 

(correspond à « ce » et « ceci » et « thi \ » s ")

0

Je l'ai fait avec une seule expression régulière en php en utilisant en arrière des références. JS ne supporte pas et je pense que c'est ce dont vous avez besoin si vous voulez vraiment détecter les barres obliques inverses non définies

Questions connexes