簡體   English   中英

用正則表達式替換開始和結束 HTML 標簽

[英]Replace opening and closing HTML tags with regex

我有以下標記:

<span style="font-size: 24px;"><font face="Courier New">[[code]]</font></span><br><p></p><span>{{name}}</span><span>[[otherCode]] </span>

並且我需要替換僅包含雙括號序列的跨度。 所以在上面的情況下,我需要獲得:

<div style="font-size: 24px;"><font face="Courier New">[[code]]</font></div><br><p></p><span>{{name}}</span><div>[[otherCode]] </div>

(即 {{name}} 周圍的跨度沒有改變。

我知道通常不推薦使用正則表達式,但在這種情況下,我覺得這是我唯一的選擇。 (僅供參考,如果您認為這些是更好的選擇,我確實可以訪問 jQuery 和 DOM。)

到目前為止,我一直在嘗試使用正則表達式,但似乎無法避免{{}}情況。 這是我目前擁有的:

/(<span[^>]*>(.*?\[\[\s*[^\]]+\s*\]\].*?)<\/span>)/gim

我認為解決方案是在第一個跨度結束標記處停止。

假設您只想避免使用{ s 的 HTML,您可以在此正則表達式上使用一些變體:

<span[^>]*>[^{]*</span>

為確保跨度之間有[[ ]] ,您可以將正則表達式更改為:

<span[^>]*>[^{]*?\[\[[^\]]*\]\][^{]*?</span>

讓我用一些間距重寫它:

<span[^>]*>
   [^{]*?   \[\[   [^\]]*   \]\]   [^{]*?
</span>

(請注意,您可能必須轉義/ 。)

由於您想用div替換span ,您可以像這樣添加捕獲括號:

<span([^>]*>[^{]*?\[\[[^\]]*\]\][^{]*?</)span>

您的替代品應該是: <div$1div>

當我在你的一個樣本上在線測試時,這有效,但如果 HTML 中有某些字符,它將失敗。 根據 HTML 結構,它也可能會損壞,尤其是在格式不佳的情況下。

在這些情況下,使用真正的解析器可能更容易。 或者,如果您能夠分解 HTML 並確保您只傳遞它可以成功處理的塊,您仍然可以使用正則表達式。

暫無
暫無

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

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