Javascript 一步解析和重写XHTML?
我需要接受以下输入:Javascript 一步解析和重写XHTML?,javascript,regex,Javascript,Regex,我需要接受以下输入: <Person> <name> <first>John</first> <last>Galt</last> </name> </Person> 约翰 高尔特 和regex我的输出方式: <div><Person> <div><name> <div>
<Person>
<name>
<first>John</first>
<last>Galt</last>
</name>
</Person>
约翰
高尔特
和regex我的输出方式:
<div><Person>
<div><name>
<div><firstt>John</first></div>
<div><lastt>Galt</last></div>
</name></div>
</Person></div>
人
名称
约翰/第一
最后一关/最后一关
/名字
/人
我有一个可行的解决方案:
var output = input.replace(/([<])\/([a-zA-Z][A-Z0-9]*)([^>]*)([>])/g, "<$2$3> </div>");
output = output.replace(/([<])([a-zA-Z][A-Z0-9]*)([^>]*)([>])/g, "<div><$2$3>");
var output=input.replace(/([]*)([>])/g,“$2$3>”);
输出=输出。替换(/([]*)([>])/g,“$2$3”);
但我觉得这有点低效,我想知道一个RegexSavant是否能帮我清理一下——最好是一步到位?我的问题是我的正则表达式无法处理嵌套元素(当我试图一步完成所有操作时)。谢谢
**EDIT:Good catch racraman注入
和
您可以使用空组匹配:
input.replace(/(<(\/)[^>\/]*>)|(<[^>\/]*>)/g,"$1<$2div>$3");
或者会使用空组方法:
var ouptut = input.
replace(/<((\/)([^>\/]*)|([^>\/]*))>/g,"<$2$3><$2div><$4>").
replace(/<>/g,"");
var-ouptut=输入。
替换(/\/]*)|([^>\/]*)>/g,“$2$3$4”)。
替换(//g,“”);
约翰应该是“约翰”吗?(高尔顿也一样)我不认为有一个简单的方法可以满足你的要求。发现这可能会有所帮助:
var output = input.replace(/<\/([^>]*)>)/g, "<$1></div>");
output = output.replace(/<([^>\/]*)>/g, "<div><$1>");
var ouptut = input.
replace(/<((\/)([^>\/]*)|([^>\/]*))>/g,"<$2$3><$2div><$4>").
replace(/<>/g,"");