RegEx 规范化 XML 语法
Posted
技术标签:
【中文标题】RegEx 规范化 XML 语法【英文标题】:RegEx to normalize XML syntax 【发布时间】:2016-02-27 23:44:44 【问题描述】:我有一个 XML 代码,其中一些标签会生成 xml 解析错误(错误 #1090)。问题在于需要引用的属性:
<div class=treeview>
请帮我写一个正则表达式,使它们如下:
<div class="treeview">
【问题讨论】:
试试:String.replace(/treeview/, "\"treeview\"")
谢谢,但代码可能类似于<div anyattr=anyvalue>
甚至<div anyattr=anyvalue anotherattr=diffvalue>
。所以这就是为什么我要求 RegEx 涵盖任何情况。其中唯一的静态内容是:tag-name 在“
在寻求帮助之前,尝试做一些努力,尝试一些东西,写一些东西......
【参考方案1】:
这个是正确的:
var pattern:RegExp = /(\w+)(=)(\w+)/g;
trace('regexTest:', pString.replace(pattern, '$1$2"$3"'));
因为,必须有3组:attribute_name、=(equals)、attribute_value
【讨论】:
这个工作正常。只是在第一组之前添加了空间【参考方案2】:拜托,你能试试下一个代码吗:
var regExp:RegExp = /(class\=)(\w+)/g;
var sourceText:String = "<div class=treeview>";
var replacedText:String = sourceText.replace(regExp, '$1"$2"');
trace(replacedText);
简而言之,这个正则表达式的意思是:
-
找到 2 个组:(class=) 和 (any-word-after-it)
在第 2 组引号前后添加。
【讨论】:
【参考方案3】:你应该试试下面的正则表达式>
regex = /(<div[^>]*class=)(\S+)([^>]*>)/g;
sourceString.replace(regex, '$1"$2"$3');
【讨论】:
【参考方案4】:尝试使用通用标记修复工具,例如 John Cowan 的 TagSoup。这可能比您自己尝试的任何方法都更加健壮(例如,大多数建议的正则表达式甚至不检查关键字=值结构是否在开始标记内)。
【讨论】:
感谢您的建议。是的,你是对的,它们中的大多数除了将一个关键字替换为另一个关键字外,其他语言的替换函数没有正则表达式。但是对于我这个有这个小问题的小应用来说已经足够了。以上是关于RegEx 规范化 XML 语法的主要内容,如果未能解决你的问题,请参考以下文章