2010-04-05 4 views
-1

L'expression rationnelle doit supprimer, id ou id, en lecture et non lu.une simple expression rationnelle

GM_setValue('unreadids', unreadids.replace(new RegExp('('+id+',)|(,'+id+')', 'i'),'')); 
GM_setValue('readids', readids.replace(new RegExp('('+id+',)|(,'+id+')', 'i'), '')); 

Dans RX Toolkit, (, 1 | 1,) pour un test, 1 ou 1 est remplacé par rien.

Dans la vraie vie ...

http://userscripts.org/scripts/show/73562
http://userscripts.org/scripts/review/

... id est pas remplacé par rien.

Pourquoi?

+1

Votre question est très difficile à comprendre. Pouvez-vous produire un script de 5 lignes qui illustre votre problème? Si c'est le cas, postez votre exemple de code autonome ici (pas sur un autre site) avec la sortie que vous obtenez et la sortie que vous voulez. –

+0

merci pour l'aide avec les compétences sociales –

Répondre

1

Votre question est difficile à comprendre, je ne pense pas que cela explique clairement ce que vous devez faire et ce qui ne va pas. Je ne suis pas sûr si les liens clarifient car ils sont cassés.

Je pense que je vois ce que vous voulez dire, mais je peux me tromper.

Si vous avez une chaîne comme

var test = "(674,)|(,674)" 

Où 674 est le "id", et vous essayez de remplacer "674" et "674" avec "" pour obtenir"() | ("

Ensuite, votre code devrait fonctionner correctement sauf que vous avez besoin du drapeau" g "(global) pour remplacer TOUTES les instances.

Exemple:

    var test = "(674,)|(,674)"; 
        var id = "674"; 
        var expr = new RegExp('(' + id + ',)|(,' + id + ')', 'gi'); 
        var b = test.replace(expr, ''); 
        alert(test); 
        alert(b); 

Vous utilisez deux fois la même expression régulière, alors pourquoi ne pas simplement l'enregistrer? Si vous vous demandez pourquoi il ne remplace pas les instances de JUST "674" en plus de "674" ou ", 675" ... eh bien parce que vous n'avez pas écrit d'expression régulière pour le remplacer ! Le vôtre ne le couvre que par les virgules.

Si c'est ce que vous essayez de faire, remplacer », 674" et « 674 », et tout simplement « 674 » avec nul est alors ici une expression régulière qui correspondent à tous ceux:

var expr = new RegExp(',?' + id + ',?', 'gi'); 

? correspond au caractère précédent 0 ou 1 fois.

Si vous devez faire correspondre uniquement les instances qui se produisent avec() |() il est assez facile d'ajuster la regex précédente pour cela, je vais laisser cela comme un exercice pour le lecteur.

Questions connexes