2009-09-10 8 views
0
'{5}<blah>{0}</blah>' 

je veux transformer en:Diviser une chaîne avec des accolades comme délimiteurs?

J'utilise actuellement: ________.split(/({.*?})/);

mais échoue lorsque accolade est le premier caractère comme dans le cas:

'{0}<blah>' 

qui est transformé en: ['', '{0}', '<blah>'] ... un tableau de 3 éléments, pas un 2

Quel est le problème avec mon regex?

Merci!

+0

Essayez de supprimer la parenthèse, et ce qui en fait un ou-match de plus . Par exemple, /{.+?}/. –

Répondre

5

Il n'y a rien de mal dans votre regex, mais il y a un problème avec la façon dont vous utilisez split. Split renvoie un tableau basé sur un délimiteur, donc si le délimiteur est FIRST, il vous donne le contenu à gauche et à droite de l'élément divisé.

Vérifiez simplement si le premier élément == '' et supprimez-le si c'est le cas.

+4

Vous avez lu ma réponse pendant que je la tapais! :) – PaulMcG

+0

Mine aussi! L'honneur n'existe pas sur Interwebs;) – roosteronacid

+1

Je suis un typer rapide, et je suis un médium assez important dans le Midwest. 1 + 2 == réponses SO volées! –

0

Cela devrait le faire:

split(/((?!^)\{.*?\})/) 

Le négatif préanalyse - (?!^) - réussit le match IFF ne démarre pas au début de la chaîne.

0

Que pensez-vous de:

'{5}<blah>{0}</blah>'.split(/{([^}]+)}/g) 

La valeur des blocs bouclés sont tous les 2 articles de l'élément 1.

Questions connexes