我有一个变量,其中包含表示 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规格 http://www.w3.org/TR/REC-xml/#NT-Name创建一个正则表达式,它可以正确解析格式良好的 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>');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)