7
votes

Remplacer le texte à l'intérieur des crochets

var a = "[i] earned [c] coin for [b] bonus";
How to get string "__ earned __ coin for __ bonus" from the variable above in JavaScript?All I want to do is to replace all the bracket [] and its content to __.

0 commentaires

3 Réponses :


3
votes
a = a.replace(/\[[^\]]+\]/g, '__');
jsFiddle.

0 commentaires

10
votes
a = a.replace(/\[[^\]]*?\]/g, '__');

6 commentaires

Dans votre deuxième exemple, vous n'avez pas besoin de faire le * ungredy.


Merci, BTW pouvez-vous m'expliquer comment ça marche? Peut-être qu'il y a un tutoriel complet à ce sujet?


régulier-expressions.info est utile ... va essayer d'expliquer plus tard si elle a une chance


@Alex: Ouais, j'aime simplement l'utiliser toujours pour la sécurité au cas où l'expression change ...


Certains caractères tels que [ et ] ont une signification particulière dans des expressions régulières, donc lorsque vous voulez réellement un support, vous devez vous échapper avec \. Donc, le premier élément ( \ [) correspond au support d'ouverture. Vient ensuite [^ \]] . Le [ et final ] indiquez une classe de caractères permettant à un groupe de caractères à l'intérieur. Dans ce cas, nous n'avons besoin que d'un seul caractère (] si nous devons nous échapper ici comme \] car l'analyseur d'expression régulier pourrait penser que nous avons terminé la classe), mais nous Utilisez la classe de caractères avec le caret (^) pour signifier "non" (pas un support).


Le *? (qui a souligné Afrig, peut être simplifié dans ce cas à * mais j'ai choisi de ne pas parce qu'il est souvent dangereux de l'utiliser car il peut remplacer davantage que vous avez voulu) signifie que le caractère ou la classe précédente peut être présent à 0 fois ou plus. Donc, [^ \]] *? signifie tout ce qui n'est pas un support de fin nombre de fois. Nous utilisons cela au lieu de . *? depuis . ne correspondra pas aux nouvelles lignes. Enfin, le \] à la fin trouve le dernier support.



3
votes

Voici un exemple amusant de groupes correspondants.

p>

/           // BEGIN  pattern
  \[        // FIND   left bracket (literal) '['
    (       // BEGIN  capture group 1
      [     // BEGIN  character class
        ^   // MATCH  start anchor OR
        \]  // MATCH  right bracket (literal) ']'
      ]     // END    character class
      +     // REPEAT 1 or more
    )       // END    capture group 1
  \]        // MATCH  right bracket (literal) ']'
/           // END    pattern
g           // FLAG   global search


0 commentaires