[英]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.