javascript - 如何使用 JavaScript 循环遍历一个长字符串以在每次匹配后插入一个新字符串

标签 javascript xml regex loops

我有一个包含代表 XML 文档的长字符串的变量。在该字符串中,我需要搜索每个自关闭标签并扩展为两个匹配的开始/结束标签。我真的不确定如何解决这个问题,非常感谢您的建议。在这一点上,我所知道的是如何通过正则表达式匹配自闭标签:[^<]+?/>这是我想要完成的一个简短示例:

原始字符串:

<outer-tag>
    <inner-tag-1>
        <SELF-CLOSING-TAG-1 foo="bar"/>
        <SELF-CLOSING-TAG-2/>
    </inner-tag-1>
    <inner-tag-2>
        <SELF-CLOSING-TAG-3 attr="value"/>
    </inner-tag-2>
</outer-tag>

修改后的字符串:

<outer-tag>
    <inner-tag-1>
        <SELF-CLOSING-TAG-1 foo="bar"></SELF-CLOSING-TAG-1>
        <SELF-CLOSING-TAG-2></SELF-CLOSING-TAG-2>
    </inner-tag-1>
    <inner-tag-2>
        <SELF-CLOSING-TAG-3 attr="value"></SELF-CLOSING-TAG-3>
    </inner-tag-2>
</outer-tag>

最佳答案

我用过 w3 specifications创建一个正确解析格式正确的 XML 中的标签的正则表达式。

首先,选择定义开始标签的字符(根据规范)。然后,匹配剩余的字符,可能不包括尾随空格和 /> .通过
"<" + starttag + remaining + "></" + starttag + ">"全局替换匹配的子字符串.见下文:

//According to the W3 spec: 
var pattern = /<([:A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][-.0-9\xB7\u0300-\u036F\u0203F-\u2040]*)([^>]*?)\s*?\/>/g;
string.replace(pattern, '<$1$2></$1>');

关于javascript - 如何使用 JavaScript 循环遍历一个长字符串以在每次匹配后插入一个新字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8068431/

相关文章:

javascript - 在 Javascript 中,如何使用 '/' 和 '/g' 内的变量对字符串执行全局替换?

javascript - jquery淡入淡出div中的背景图像 - 交叉淡入淡出

javascript - jqueryui对话框使屏幕变灰

javascript - 多次更新 z-index 以使菜单项正确显示

java - 使用XPath搜索父节点获取子节点

php - 使用 XML DOM 打印 XML 文件的内容

python - 在 Python 中使用正则表达式查看文本文件

javascript - Bootstrap 组件将文本分组到框中?

xml - XSLT:读取作为字符串传递的 xml 文档的参数

javascript - 使用 RegEx 从 url 获取数据