移除無效HTML標籤之間的空格的正規表示式 - 例如"< / b >"應該是"</b>"
P粉884667022
P粉884667022 2023-09-02 19:56:28
0
2
528
<p>我有一些 HTML,這些 HTML 都被標籤內的空格弄亂了,並且希望使其再次有效 - 例如:</p> <pre class="brush:php;toolbar:false;">< div class='test' >1 > 0 is < b >true</ b> and apples >>> bananas< / div ></pre> <p>應轉換為有效的 HTML,並且在渲染時,預計會產生:</p> <p> <pre class="snippet-code-html lang-html prettyprint-override"><code><div class='test'>1 > 0 is <b>true</b> and apples >>> bananas</div></code></pre> </p> <p>文本中任何<code>></code> 或</code>><</code> 前面/後面有空格的文本應保持不變- 例如,<code>/code> 前面/後面有空格的文本應保持不變- 例如,<code> ;1 > 0</code> 要保留,而不是壓縮到<code>1>0</code></p > <p>我意識到這可能需要幾個正規表示式,這很好</p> <p>我有幾件事:</p> <p><code><\s?\/\s*</code> 這將部分修復<code></ b></ div ></code> 到< code></b></div ></code>,但我正在努力解決其餘問題< /p> <p>例如,我可以採取嚴厲的方法,但這也會破壞標籤文字部分內的程式碼,而不是標籤名稱本身</p>
P粉884667022
P粉884667022

全部回覆(2)
P粉323050780

沒有合理的方法來保存像您發布的內容一樣損壞的文檔,但假設您將文本中的> 和類似字元替換為其相關實體,例如: &gt ;,您可以將要接受的文件放入適當的庫中,例如DomDocument 將處理剩下的事情。

$input = <<<_E_
< div class='test' >1 > 0 is < b >true</ b> and apples >>> bananas< / div >
_E_;

$input = preg_replace([ '#<\s+#', '#</\s+#' ], [ '<', '</' ], $input);

$d = new DomDocument();
$d->loadHTML($input, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

var_dump($d->saveHTML());

輸出:

string(80) "<div class="test">1 > 0 is <b>true</b> and apples >>> bananas</div>"
P粉064448449

這個正規表示式也有效:

它將 HTML 標籤中的有效部分分為四個部分,並用其替換其餘部分(空格)。

Regex101 示範

/(]*\S)\s*(>)/g

  • #( - 捕捉起始尖括號(第 1 節)
  • \s* - 符合任何空格
  • (\/?) - 捕捉可選的反斜線(第 2 部分)
  • \s* - 符合反斜線後的任何空格
  • ([^]*\S) - 捕捉標籤內的內容,不帶尾隨空格(第 3 節)
  • \s* - 符合內容後面和右尖括號之前的空格
  • (>) - 捕捉右尖括號(第 4 節)

const reg = /(<)\s*(\/?)\s*([^<>]*\S)\s*(>)/g
const str = "< div class='test' >1 > 0 is < b >true< / b > and apples >>> bananas< / div  >"
const newStr = str.replace(reg, "");
console.log(newStr);
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板