Javascript 一步解析和重写XHTML?

Javascript 一步解析和重写XHTML?,javascript,regex,Javascript,Regex,我需要接受以下输入: <Person> <name> <first>John</first> <last>Galt</last> </name> </Person> 约翰 高尔特 和regex我的输出方式: <div>&lt;Person&gt; <div>&lt;name&gt; <div>

我需要接受以下输入:

<Person>
  <name>
    <first>John</first>
    <last>Galt</last>
  </name>
</Person>

约翰
高尔特
和regex我的输出方式:

<div>&lt;Person&gt;
  <div>&lt;name&gt;
    <div>&lt;firstt&gt;John&lt;/first&gt;</div>
    <div>&lt;lastt&gt;Galt&lt;/last&gt;</div>
  &lt;/name&gt;</div>
&lt;/Person&gt;</div>
人
名称
约翰/第一
最后一关/最后一关
/名字
/人
我有一个可行的解决方案:

var output = input.replace(/([<])\/([a-zA-Z][A-Z0-9]*)([^>]*)([>])/g, "&lt;$2$3&gt </div>");
    output = output.replace(/([<])([a-zA-Z][A-Z0-9]*)([^>]*)([>])/g, "<div>&lt;$2$3&gt;");
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,"&lt;$2$3&gt;<$2div>&lt;$4&gt;").
replace(/&lt;&gt;/g,"");
var-ouptut=输入。
替换(/\/]*)|([^>\/]*)>/g,“$2$3$4”)。
替换(//g,“”);

约翰应该是“约翰”吗?(高尔顿也一样)我不认为有一个简单的方法可以满足你的要求。发现这可能会有所帮助:
var output = input.replace(/<\/([^>]*)>)/g, "&lt;$1&gt;</div>");
    output = output.replace(/<([^>\/]*)>/g, "<div>&lt;$1&gt;");
var ouptut = input.
replace(/<((\/)([^>\/]*)|([^>\/]*))>/g,"&lt;$2$3&gt;<$2div>&lt;$4&gt;").
replace(/&lt;&gt;/g,"");