2 votes

Remplacez le contenu présent dans les crochets imbriqués

Entrée = ABCDEF ((3) abcdef),GHIJKLMN ((4)(5) Value),OPQRSTUVW((4(5)) Value (3))

Sortie attendue = ABCDEF,GHIJKLMN,OPQRSTUVW

Essayé jusqu'à présent

Output = Input.replace(/ *\([^)]*\)*/g, "");

4voto

Tim Biegeleisen Points 53335

Utiliser une regex ici ne fonctionnera probablement pas, ou n'évoluera pas, car vous vous attendez à des parenthèses imbriquées dans votre chaîne d'entrée. Les regex fonctionnent bien lorsqu'il y a une structure connue et fixe en entrée. Je vous recommande plutôt d'aborder cela en utilisant un parseur. Dans le code ci-dessous, je parcours la chaîne d'entrée, caractère par caractère, et j'utilise un compteur pour suivre le nombre de parenthèses ouvertes. Si nous sommes à l'intérieur d'un terme de parenthèses, alors nous n'enregistrons pas ces caractères. J'ai également un remplacement simple à la fin pour supprimer les espaces, ce qui est une étape supplémentaire que votre production implique, mais que vous n'avez jamais mentionnée explicitement.

var pCount = 0;
var Input = "ABCDEF ((3) abcdef),GHIJKLMN ((4)(5) Value),OPQRSTUVW((4(5)) Value (3))";
var Output = "";
for (var i=0; i < Input.length; i++) {
    if (Input[i] === '(') {
        pCount++;
    }
    else if (Input[i] === ')') {
        pCount--;
    }
    else if (pCount == 0) {
        Output += Input[i];
    }
}

Output = Output.replace(/ /g,'');
console.log(Output);

2voto

Wiktor Stribiżew Points 100073

Si vous avez besoin de supprimer les parenthèses imbriquées, vous pouvez utiliser une astuce de Remove Nested Patterns with One Line of JavaScript.

var Input = "ABCDEF ((3) abcdef),GHIJKLMN ((4)(5) Value),OPQRSTUVW((4(5)) Value (3))";
var Output = Input;
while (Output != (Output = Output.replace(/\s*\([^()]*\)/g, ""))); 
console.log(Output); 

Ici, \s*\([^()]*\) correspond à 0+ espaces, (, 0+ caractères autres que ( et ), puis un ), et l'opération de remplacement est répétée jusqu'à ce que la chaîne ne change pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X