REGEX

Résolu
Bonjour,

J'aimerai savoir si c'est possible, dans le cadre d'un replace de rendre des parenthèses non capturante?

merci d'avance
Configuration: Windows XP
Firefox 3.0.6

7 réponses

  1. Modérateur
    Ca dépend de ce que tu utilises pour faire ton expression régulière il y a plusieurs syntaxe (vim, bash, pcre, perl...). Par exemple sous vim elles sont échappées et les parenthèses capturent si elles sont échappées \( \). En bash et en pcre tu peux essayer [(] et [)].

    Bonne chance
    1. J'utilise PCRE,
      j'ai testé et comme je l'imaginai ça ne fonctionne pas.

      En fait je ne veux pas les échapper seulement utiliser leur autre fonction.

      En gros un si pas suivie de ça...

      exemple:

      /bon(?!jour)/

      mais dans un replace

      Une autre idée peut être?
      1. Modérateur
        Désolée mais je n'ai pas compris. Donne moi un exemple de ce que tu veux catcher et un exemple de ce que tu ne veux pas catcher.
        1. une exemple de bbcode si tu veux

          Prévisualisation en js

          resultat.replace(/\[b\](.+)\[\/ b\]/gi, "<span style='font-weight:bold;'>$1</ span>");


          Alors ça marche mais le soucis c'est quand tu as deux fois la même balise

          exemple:

          [b]kkk[/ b]
          kkkkkkkkk
          [b]kkk[/ b]


          là il y as soucis puisque tu te retrouve avec:

          kkk[/ b]
          kkkkkkkkk
          [b]kkk


          Donc en fait je voudrais faire quelque chose comme çà:

          resultat.replace(/\[b\](?!\[b\]\[\/ b\])*\[\/ b\]/gi, "<span style='font-weight:bold;'>$1</span>");


          Pour qu'il n'agisse couple par couple de balise identique, mais bien sûr dans le cas d'un replace les parenthèses sont capturantes donc ça ne fonctionne pas...

          Voilà j'espère que c'est assez clair
          1. Modérateur
            En admettant que le fichier soit bien formé (balises cohérentes) je ferais simplement deux replaces successifs :
            - un premier qui transforme tous les [b]
            - un second qui transforme tous les [/ b]

            Non ?

            Bonne chance
            1. Ben oui tout simplement !!!

              Je suis con c'est pas possible, faut toujours que je complique!

              Bon en tout cas merci de ton aide!!!