Javascript, Regexp sur Clubic

Salut à tous.

Comme certains s’en sont déjà rendu compte, certains forumeurs ont un pseudo contenant les caractères [ ou ]

C’est caractères à la con foutent le bordel dans le parleur de Clubic à tel point qu’il n’est pas possible de quoter correctement les messages de ces personnes

Le but de jeu est de faire un petit script qui convertit les [] en | de façon à ce que les quotes se fassent correctement.
Il s’agit donc de remplacer:
[ quote="[Pseudo]" ] blabla [ /quote]
par :
[ quote="|Pseudo|" ] blabla [ /quote]

J’ai donc écrit un script trivial:

javascript:{
var theText = document.getElementById(‘txt’).value;
theText = theText.replace(/[/g,"|");
theText = theText.replace(/[/g,"|");
document.getElementById(‘txt’).value=theText;void(0);
}

Le problème, c’est que ce script remplace toutes les occurrences de [ ] et je ne voudrais remplacer que celles contenues dans la balise [ quote] de façon à ce que seul le nom du forumeur soit changé.

Mais ne connaissant ni JS ni les regexp, je crois que je ne pourrais pas m’en tirer tout seul.
Une bonne âme pour m’aider ?

Oui dans l’absolue je veut bien te donner un coup de main mais les regexp c’est pas mon fort, et en js encore moins. Ce bug fait quand même bien couiller la structure du forum, pour meilleur lisibilité j’ai enlevé les espace de ton code et entouré de la balise code. Bon bug ( problème de sécu ? ).

T’a contacté clubic ?




[quote="[Pseudo]"]blabla[quote=""]
[/quote]

par :

[quote="|Pseudo|" ]blabla[ /quote]


Edité le 05/01/2012 à 17:42

T’a contacté clubic ?

Non. Bug non prioritaire, sera peut-être traité et 2024. :ane:
Déjà que pour les prioritaires j’ai pas d’espoir avant 2017, alors quand c’est sur le forum, c’est encore plus long :whistle:

Le plus judicieux serait incontestablement de faire un parser qui marche mais bon

et si tu testes sur quote="[ au lieu de tester uniquement sur [ ?

Bah c’est ce que j’aimerais faire, remplacer toutes les occurrences de [ et ] à l’interieur d’une balise quote, mais je ne sais pas comment. :confused:

Peut être avec jquery ( je sait c’est aussi du js mais plus souple ). Tu renomme temporairement les [quote=""]
en div et avec tu traverse ensuite les div pour supprimer le “” et ensuite tu renome les div en quote

Dans n’importe quel langage que je pratique, ça ne me poserait aucun soucis, c’est la base, mais là, je ne sais pas pour où commencer, je ne connais même pas la syntaxe.

Finalement, je me suis trouvé un petit tuto en JS, et j’ai bidouillé une petite routine, ça donne ça et ça semble fonctionner:

javascript:{
var theText = document.getElementById('txt').value;
var pos2 = 0;
var pos1 = theText.indexOf('quote="', pos2);
while (pos1 > 0){
pos1 = pos1 + 7;
pos2 = theText.indexOf('"]',pos1);
var theName = theText.substring(pos1,pos2);
theName = theName.replace(/\]/g,%22|%22);
theName = theName.replace(/\[/g,%22|%22);
theText = theText.substring(0,pos1) + theName + theText.substr(pos2,theText.length);
pos1 = theText.indexOf('quote="',pos2);
}
document.getElementById('txt').value=theText;void(0);
}

Franck: je ne vois pas ce que tu veux obtenir par là, il doit faire quoi au final ton script ?
Oh, et la regexp que je ferai (façon php preg_match) : @[quote="([^"\n]+)"](.+)[/quote]@gsi

i = case insensitive
g = non greedy
s = . = aussi les sauts de lignes.

Franck: je ne vois pas ce que tu veux obtenir par là, il doit faire quoi au final ton script ?

C’est écrit dans mon premier message. :o

Le script là dessus remplace par | les [ et ] contenus dans un pseudo quoté, de façon à ce que les quotes sur le forum s’affichent correctement.

Un pseudo du type -=[Franck]=- ne sera pas quoté correctement parce que le forum buggue. Le but du jeu est donc de le remplacer par -=|Franck|=- pour arriver à faire une quote correcte.

C’est ce que fait le script au dessus.

Et tu le fais par rapport aux messages que tu souhaites éditer, donc tu les as au format brut.

J’ai testé ça : document.getElementById(‘txt’).value.replace(/[quote="([^"\n]+)"](.+)[/quote]/gmi, '$1[quote=XXX]$2
[/quote]
')

Mais sans succès, pas même le premier match.

oui, quand je clique sur “citer”, j’ai naturellement le format brut qui apparait avec les
[ quote="-=[tartempion]=-"]j’ai toujours raison[ /quote]

Ouais. Moi je voulais lancer cet regexp via firebug mais ça n’a pas fonctionner des masses. Elle ne trouve rien.

Je me suis fait un favori avec le code au dessus. Et quand je cliquer sur citer, j’appuie manuellement dessus et l’affaire est faite. Y’a sûrement moyen d’optimiser mais bon, ça marche, c’est déjà ça.

Si je pouvais lancer le script automatiquement quand je clique sur citer ce serait encore mieux :ane: mais je ne sais pas si techniquement c’est possible. ( et de toutes façons il faudrait attendre que le texte arrive dans la zone de texte, ce qui n’est pas toujours immédiat )

Sous firefox il y a un tool qui s’apelle “greasemonkey”.

Et sous firefox, tu peux ajouter des trucs dans ton userscript.js (ou un nom du genre). Enfin, je sais que ça existe pour les CSS, peut-être pas pour le script…

et ça se declenche quand, userscript.js ?

Au chargement de la page. Du coup il faut que tu ailles t’attacher à un évènement (genre le click sur “envoyer mon message”). J’espère que tu aimes jQuery :smiley:

Je ne m’y connais pas suffisamment pour faire ça.

Jquery est plus simple que du js “normal”