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
    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. 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. Ben oui tout simplement !!!

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

              Bon en tout cas merci de ton aide!!!