2017-06-22 4 views
-1

Serait-il possible de remplacer la virgule seulement si elle n'est pas entre parenthèses.Javascript/regex: Enlever la virgule seulement si elle n'est pas entre parenthèses

par exemple. filters=fuelType=D,make=[BMW,CITROEN,DACIA],price=(0,100) à ceci: filters=fuelType=D&make=[BMW,CITROEN,DACIA]&price=(0,100)

+0

il semble que vous allez les remplacer par '&', vous devez reformater votre question et ajouter ce que vous avez. Ce n'est pas un endroit d'aide/moi. – Hitmands

+0

Il y a des dizaines de questions sur SO pour trouver des choses ou ne pas trouver des choses entre parenthèses. S'il vous plaît chercher pour eux. La notion de base est de rechercher ** soit ** une expression entre parenthèses ** ou ** ce que vous voulez remplacer, puis de ne remplacer que ce dernier. –

+2

Pouvez-vous fournir un contexte plus large sur le vrai problème que vous essayez de résoudre ici? Comment vous êtes-vous retrouvé avec cette chaîne séparée par des virgules? Il y a probablement un moyen beaucoup plus facile de construire (vraisemblablement) des paramètres d'URL plutôt que d'appliquer une regex confuse à cette chaîne. –

Répondre

1

C'est l'expression rationnelle que vous voulez: /,\s*(?=[^)^\]]*(?:\(|\[|$))/g

est ici le violon js remplaçant vos virgules de chaîne en dehors [] et () pour & en utilisant String.prototype.replace():

var string = 'filters=fuelType=D,make=[BMW,CITROEN,DACIA],price=(0,100)'; 
var result = string.replace(/,\s*(?=[^)^\]]*(?:\(|\[|$))/g, '&'); 
alert(result); // -> `filters=fuelType=D&make=[BMW,CITROEN,DACIA]&price=(0,100)` 

https://jsfiddle.net/tmms2mck/

Et voici l'explication regex101 de cette expression régulière: https://regex101.com/r/hAuEQm/1