簡體   English   中英

一步解析和重寫XHTML?

[英]Parsing and rewriting XHTML in one step?

我需要輸入以下內容:

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

正則表達式我的輸出方式:

<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;");

但是我覺得它有點低效,並且想知道正則表達式專家是否可以幫助我將其清理干凈-理想的情況是一步? 我的問題是我的正則表達式無法處理嵌套元素(當我嘗試一步完成所有操作時)。 謝謝!

**編輯:好抓拉克拉曼

要注入<div></div>您可以使用空組匹配:

input.replace(/(<(\/)[^>\/]*>)|(<[^>\/]*>)/g,"$1<$2div>$3");

這樣會產生:

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

但是您還要求將<>替換為&lt; &gt; 分別-已知的正則表達式引擎在同一步驟中不支持此類組內容轉換。 例如,您只能使用匹配組的一部分,也可以使用原始的(大寫/小寫)轉換

所以我要么簡化了您的:

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,"");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM