变量中匹配字符串内的Javascript循环

时间:2019-01-28 17:26:52

标签: javascript

我有一个可能很容易解决的问题,但是完全让我无法解决。非常感谢您的帮助。

我有一个文档,我在其中搜索字符串,然后在字符串中找到匹配项 ,将这些匹配项放入变量中,以备后用。当字符串中有多个匹配项时,就会出现我的问题。我不知道如何在变量(找到的字符串)中循环。现在,它仅替换第一次出现的情况。我知道我需要一个循环,我只是不知道如何在变量内进行循环。

感谢您的帮助, 最高

测试数据:

<warning>
<dmCode assyCode="00" disassyCode="01" disassyCodeVariant="AAA" infoCode="00W" infoCodeVariant="A" itemLocationCode="A" modelIdentCode="GAASIB0" subSubSystemCode="0" subSystemCode="0" systemCode="00" systemDiffCode="00"/>
<dmCode assyCode="00" disassyCode="02" disassyCodeVariant="AAA" infoCode="00W" infoCodeVariant="A" itemLocationCode="A" modelIdentCode="GAASIB0" subSubSystemCode="0" subSystemCode="0" systemCode="00" systemDiffCode="00"/>
<dmCode assyCode="00" disassyCode="03" disassyCodeVariant="AAA" infoCode="00W" infoCodeVariant="A" itemLocationCode="A" modelIdentCode="GAASIB0" subSubSystemCode="0" subSystemCode="0" systemCode="00" systemDiffCode="00"/>
</warning>

代码:

DMCString = warninglinebreaks.match(/<dmCode.+?>/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);

1 个答案:

答案 0 :(得分:1)

代替

DMCString = warninglinebreaks.match(/<dmCode.+?>/i);
if (DMCString != null) {
  DMC = DMCString[0];

即始终仅使用第一个匹配项,则应执行for循环,例如:

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

    ...

  }
}

这样,您可以遍历匹配行(DMCString)的数组。 还请注意,为正则表达式添加了g标志,以匹配所有行,而不仅仅是@PierreC建议的第一行。评论。

let warninglinebreaks = `
<warning>
<dmCode assyCode="00" disassyCode="01" disassyCodeVariant="AAA" infoCode="00W" infoCodeVariant="A" itemLocationCode="A" modelIdentCode="GAASIB0" subSubSystemCode="0" subSystemCode="0" systemCode="00" systemDiffCode="00"/>
<dmCode assyCode="00" disassyCode="02" disassyCodeVariant="AAA" infoCode="00W" infoCodeVariant="A" itemLocationCode="A" modelIdentCode="GAASIB0" subSubSystemCode="0" subSystemCode="0" systemCode="00" systemDiffCode="00"/>
<dmCode assyCode="00" disassyCode="03" disassyCodeVariant="AAA" infoCode="00W" infoCodeVariant="A" itemLocationCode="A" modelIdentCode="GAASIB0" subSubSystemCode="0" subSystemCode="0" systemCode="00" systemDiffCode="00"/>
</warning>
`;

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

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

  }
}