去除无效HTML标签之间的空格的正则表达式 - 例如"< / b >"应该是"</b>"
P粉884667022
P粉884667022 2023-09-02 19:56:28
0
2
371
<p>我有一些 HTML,这些 HTML 都被标签内的空格弄乱了,并且希望使其再次有效 - 例如:</p> <pre class="brush:php;toolbar:false;">&lt; div class='test' &gt;1 &gt; 0 is &lt; b &gt;true&lt;/ b&gt; and apples &gt;&gt;&gt; bananas&lt; / div &gt;</pre> <p>应转换为有效的 HTML,并且在渲染时,预计会生成:</p> <p> <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;div class='test'&gt;1 &gt; 0 is &lt;b&gt;true&lt;/b&gt; and apples &gt;&gt;&gt; bananas&lt;/div&gt;</code></pre> </p> <p>文本中任何 <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 &gt; 0 is < b >true</ b> and apples &gt;&gt;&gt; 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 &gt; 0 is <b>true</b> and apples &gt;&gt;&gt; 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, "$1$2$3$4");
console.log(newStr);
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!