javascript - 变量中匹配字符串内的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);
解决方案
代替
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);
}
}
推荐阅读
- javascript - 如何在 JavaScript 中通过其对象键之一对数组进行分组
- jira - 如何永久恢复到 Jira 中的旧视图?
- react-native - React Native- 在 Drawer Navigator 屏幕之间传递数据
- powershell - Set-UnifiedGroup 未被识别为 cmdlet 的名称
- racket - :: *: 期望一个数字作为第一个参数,给定 (lambda (a1) ...)
- c++ - std::async int 可以在任务完成之前退出函数吗?
- visual-studio - 从 Visual Studio 2019 将 ASP.NET Core 3.1 站点发布到 Azure 时出错
- javascript - 如何使用 console.log 进行数字除法
- r - 如何为每组设置不同的 set.seed() 然后 sample()
- javascript - 如果服务器不读取内容而是发送响应,则 XMLHttpRequest 发布文件失败(即使使用代码 200)