从 html 属性中删除单引号和双引号,并且除 href 和 src 之外的所有属性上都没有空格

2024-05-18

我正在尝试从 html 属性中删除单引号和双引号,这些属性是没有空格的单个单词。我写了这个有效的正则表达式:

/((type|title|data-toggle|colspan|scope|role|media|name|rel|id|class|rel)\s*(=)\s*)(\"|\')(\S+)(\"|\')/ims

然而,我并没有指定我想要删除引号的所有 html 标签,而是只列出要忽略的几个属性,例如 src 和 href,并删除所有其他属性名称上的引号。所以我写了下面的内容,但对我来说这不起作用。它如何检测除 href 和 src 之外的任何属性名称。我尝试了各种组合。

/((?!href|src)(\S)+\s*(=)\s*)(\"|\')(\S+)(\"|\')/i

我已经尝试过这个,但它不起作用。它只是删除了 href 和 src 属性中的 h 和 s。我知道我已经很接近了,但还缺少一些东西。我在这上面花了足足5个小时。

工作示例

$html_code = 'your html code here.';

preg_replace('/((type|title|data-toggle|colspan|scope|role|media|name|rel|id|class|rel)\s*(=)\s*)(\"|\')(\S+)(\"|\')/i', '$1$5', "$html_code");

我修改了您编写的较小的正则表达式,结果是:

((\S)+\s*(?<!href)(?<!src)(=)\s*)(\"|\')(\S+)(\"|\')

解析您的版本时,前瞻将到达文档中“href”之前的某个“h”并失败,然后继续处理下一个字符。由于“ref”与“href”或“src”不匹配,因此模式的其余部分将匹配。

经过我的修改,任何“href”或“src”最初都会被正则表达式接受。当到达lookbehind时,它将检查已解析文本中的“href”,如果找到则失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 html 属性中删除单引号和双引号,并且除 href 和 src 之外的所有属性上都没有空格 的相关文章

随机推荐