我正在使用一系列正则表达式模式从我的代码中删除 HTML 元素。我还需要删除 style="{stuff}"
文件中也存在的属性。
目前我有 style.*?
, 它只匹配单词 style
,但是我认为通过添加 .*?
对于正则表达式,它还会在样式声明后匹配零到无限个字符吗?
我还有style={0,1}"{0,1}.*?"{0,1}
哪个匹配:
style=""
style="
style
但不匹配style="something"
,再次在此正则表达式中,我希望 .*?
匹配第一个 "
之间的所有内容第二个"
, 但这种情况并非如此。我需要做什么来更改此正则表达式,以便它与以下所有内容匹配:
style="font-family:"Open Sans", Arial, sans-serif;background-color:rgb(255, 255, 255);display:inline !important;"
style=""
style="something"
style
最佳答案
模式 style.*?
不匹配以下部分,因为非贪婪部分后面没有任何内容,因此它尽可能匹配。
您可以使用可选组和否定字符类:
\bstyle(?:="[^"]*")?
部分
\bstyle
字边界,匹配样式(?:
非捕获组="
匹配=
并打开"
[^"]*
使用 negated character class 匹配任意字符 0 次以上,"
除外"
匹配结束"
)?
关闭组并使其可选
如果您想将单引号或双引号与随附的结束单引号或双引号匹配以不匹配,例如 style="'
,您可以使用捕获组 (["' ])
带有 backreference \1
到第 1 组中捕获的内容:
\bstyle(?:=(["'])[^"]*\1)?
关于html - 匹配样式 =' ' 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57992363/