【发布时间】:2020-07-08 18:58:43
【问题描述】:
我正在尝试更改具有内联样式的 HTML 页面,我想制作一个捕获背景 url 和选择器的正则表达式,例如:
<div>some html here</div>
<style>#some-selector {
padding-top: 408px;
}
#some-selector .bg {
background-image: url(www.some-url.com/some-image.jpg);
}
#some-selector {
background-position: 43% 97%;
}
这里我要捕捉的是#some-selector .bg和www.some-url.com/some-image.jpg,记住HTML页面很大,表达要快
我想出了这个表达式 <style[\s\S]*?[>}\/\n](.*){[\s\S]*?background.*?url\((.*?)\) 但它不能正常工作,我知道我的第一个 [\s\S] 应该是贪婪的,但是当我删除 ? 它会导致灾难性的回溯 <style[\s\S]*[>}\/\n](.*){[\s\S]*?background.*?url\((.*?)\) 它确实有效小字符串,但在整个页面上会导致灾难性的回溯,我使用 regex101 对其进行测试。
感谢任何帮助
编辑:这是一个例子https://regex101.com/r/ZMxOSz/1
【问题讨论】:
-
您使用的是哪种工具或语言?用正则表达式解析 CSS 不是一个好主意;所以;你应该使用 CSS 解析器。
-
我正在使用 PHP,我认为提取 CSS 并解析它会比使用正则表达式花费更多的时间,在这种情况下,每个毫秒都很重要
-
Nooo...解析器始终是最佳选择,因为如果 css 文件是动态的,正则表达式可能会适得其反。请阅读 this 了解为什么这是一个坏主意。
标签: regex regex-greedy