2 votes

Boucle Javascript à l'intérieur de la chaîne correspondante dans la variable

J'ai un problème qui est probablement simple à résoudre, mais qui m'échappe complètement. Votre aide est vraiment appréciée.

J'ai un document dans lequel je cherche une chaîne de caractères, puis je trouve des correspondances dans cette chaîne, je mets ces correspondances dans des variables pour les utiliser plus tard. Mon problème survient lorsque plusieurs correspondances sont trouvées à l'intérieur de la chaîne. Je n'arrive pas à comprendre comment boucler dans une variable (chaîne trouvée). Pour l'instant, il remplace uniquement la première occurrence. Je sais que j'ai besoin d'une boucle, je ne sais juste pas comment faire cela à l'intérieur d'une variable.

Merci pour votre aide, Max

Données de test :

Code :

DMCString = warninglinebreaks.match(//i);
if (DMCString != null) {
  DMC = DMCString[0];

  match = DMC.match(/modelIdentCode="(.*?)"/im);
  if (match !== null) {
    var modelIdentCode = match[1];
  } else {
    var modelIdentCode = "";
  }

  match = DMC.match(/systemDiffCode="(.*?)"/im);
  if (match !== null) {
    var systemDiffCode = match[1];
  } else {
    var systemDiffCode = "";
  }

  var Regex = /systemCode="(.*?)"/;
  var match = Regex.exec(DMC);
  if (match != null) {
    systemCode = match[1];

  } else {
    systemCode = "";
  }

  match = DMC.match(/\ssubSystemCode="(.*?)"/im);
  if (match !== null) {
    var subSystemCode = match[1];
  } else {
    var subSystemCode = "";
  }

  match = DMC.match(/subSubSystemCode="(.*?)"/im);
  if (match !== null) {
    var subSubSystemCode = match[1];
  } else {
    var subSubSystemCode = "";
  }

  match = DMC.match(/assyCode="(.*?)"/im);
  if (match !== null) {
    var assyCode = match[1];
  } else {
    var assyCode = "";
  }

  match = DMC.match(/disassyCode="(.*?)"/im);
  if (match !== null) {
    var disassyCode = match[1];
  } else {
    var disassyCode = "";
  }

  match = DMC.match(/disassyCodeVariant="(.*?)"/im);
  if (match !== null) {
    var disassyCodeVariant = match[1];
  } else {
    var disassyCodeVariant = "";
  }

  match = DMC.match(/infoCode="(.*?)"/im);
  if (match !== null) {
    var infoCode = match[1];
  } else {
    var infoCode = "";
  }
  match = DMC.match(/infoCodeVariant="(.*?)"/im);
  if (match !== null) {
    var infoCodeVariant = match[1];
  } else {
    var infoCodeVariant = "";
  }

  match = DMC.match(/itemLocationCode="(.*?)"/im);
  if (match !== null) {
    var itemLocationCode = match[1];
  } else {
    var itemLocationCode = "";
  }

  var sFileName = "DMC-" + modelIdentCode +"-"+ systemDiffCode +"-"+ systemCode + "-" + subSystemCode + subSubSystemCode + "-" + assyCode +"-"+ disassyCode + disassyCodeVariant +"-" + infoCode +infoCodeVariant +"-" +itemLocationCode;
}
DMCClean = Wlinebreaks.replace(DMCString, sFileName);

1voto

MarcoS Points 1969

Au lieu de

DMCString = warninglinebreaks.match(//i);
if (DMCString != null) {
  DMC = DMCString[0];

c'est-à-dire en utilisant toujours uniquement la première correspondance, vous devriez utiliser une boucle for, par exemple :

DMCString = warninglinebreaks.match(//ig);
if (DMCString != null) {
  for (var i = 0; i < DMCString.length; i++) {
    DMC = DMCString[i];

    ...

  }
}

de cette façon, vous parcourez le tableau de vos lignes correspondantes (DMCString). Notez également la marque g ajoutée pour l'expression régulière, pour correspondre à toutes les lignes, et non seulement à la première, comme suggéré par le commentaire de @PierreC.

let warninglinebreaks = `

`;

DMCString = warninglinebreaks.match(//ig);
if (DMCString != null) {
  for (var i = 0; i < DMCString.length; i++) {
    DMC = DMCString[i];

    console.log('DMC:', DMC);

  }
}

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