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.
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. –
merci pour l'aide avec les compétences sociales –