[英]Parsing and rewriting XHTML in one step?
我需要輸入以下內容:
<Person>
<name>
<first>John</first>
<last>Galt</last>
</name>
</Person>
正則表達式我的輸出方式:
<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>");
但是我覺得它有點低效,並且想知道正則表達式專家是否可以幫助我將其清理干凈-理想的情況是一步? 我的問題是我的正則表達式無法處理嵌套元素(當我嘗試一步完成所有操作時)。 謝謝!
**編輯:好抓拉克拉曼
要注入<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>
但是您還要求將<
和>
替換為<
和>
分別-已知的正則表達式引擎在同一步驟中不支持此類組內容轉換。 例如,您只能使用匹配組的一部分,也可以使用原始的(大寫/小寫)轉換 。
所以我要么簡化了您的:
var output = input.replace(/<\/([^>]*)>)/g, "<$1></div>");
output = output.replace(/<([^>\/]*)>/g, "<div><$1>");
或會使用空組方法:
var ouptut = input.
replace(/<((\/)([^>\/]*)|([^>\/]*))>/g,"<$2$3><$2div><$4>").
replace(/<>/g,"");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.