繁体   English   中英

如何在javascript中用正则表达式替换特定出现的字符串

[英]how to replace particular occurence of string with regex in javascript

这是代码,它用于单行字符串,但不适用于多行文本。 我正在从 xml 文件中提取数据。

let xmlData = `<?xml version="1.0" encoding="utf-8"?>
    <RecipeData>
    <SUNDAY Value="1"/>
    <SUNDAY/>
    <SUNDAY/>
    <SUNDAY/>
    <MONDAY Value="1"/>
    </MONDAY>
    <MONDAY>
    </MONDAY>
    </RecipeData>`;
    search = '<SUNDAY/>'
    let n = 2
    console.log(xmlData.replace(RegExp("((<SUNDAY(\s*)\/(\s*)>)$\g){" + n + "}"), function(x){return x.replace(RegExp("((<SUNDAY(\s*)\/(\s*)>)$\g)" + "$"), "HHHH")}))

预期输出:

我们正在替换第二次出现的

`<SUNDAY with HHHH.`

所以输出将是:

<?xml version="1.0" encoding="utf-8"?>
        <RecipeData>
        <SUNDAY Value="1"/>
        <HHHHH/>
        <SUNDAY/>
        <SUNDAY/>
        <MONDAY Value="1"/>
        </MONDAY>
        <MONDAY>
        </MONDAY>
        </RecipeData>;

一种选择是使用DOMParser ,例如计算nodeName等于SUNDAY的出现次数。

如果匹配,则通过 parentNode 将节点替换为新节点。

 let xmlData = `<?xml version="1.0" encoding="utf-8"?> <RecipeData> <SUNDAY Value="1"/> <SUNDAY/> <SUNDAY/> <SUNDAY/> <MONDAY Value="1"> </MONDAY> <MONDAY> </MONDAY> </RecipeData>`, search = 'SUNDAY', n = 2; parser = new DOMParser(); xmlDoc = parser.parseFromString(xmlData, "text/xml"); let childNodes = xmlDoc.documentElement.childNodes; let nrSundays = 0; for (let i = 0; i < childNodes.length; i++) { if (childNodes[i].nodeName === search) { nrSundays++; if (nrSundays === n) { let childNode = childNodes[i]; childNode.parentNode.replaceChild(xmlDoc.createElement('HHHHH'), childNode); } } } console.log(new XMLSerializer().serializeToString(xmlDoc.documentElement));


另一种选择可能是使用评估使用 xpath

 let xmlData = `<?xml version="1.0" encoding="utf-8"?> <RecipeData> <SUNDAY Value="1"/> <SUNDAY/> <SUNDAY/> <SUNDAY/> <MONDAY Value="1"> </MONDAY> <MONDAY> </MONDAY> </RecipeData>`, search = 'SUNDAY', n = 2; parser = new DOMParser(); xmlDoc = parser.parseFromString(xmlData, "text/xml"); let nodeSunday = xmlDoc.evaluate(`/RecipeData/${search}[${n}]`, xmlDoc.documentElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); nodeSunday.singleNodeValue.parentNode.replaceChild(xmlDoc.createElement('HHHH'), nodeSunday.singleNodeValue); console.log(new XMLSerializer().serializeToString(xmlDoc.documentElement));

其他

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM