正则表达式去除所有 html 除了背景样式 url
Regex strip all html except background style url
我有以下 regex
可以在我的 HTML 中找到所有背景样式 URL。我正在尝试去除除背景图片 URL 之外的所有 HTML。我的目标是从我的 HTML 页面中抽象出一个背景图片 URL 列表。
表达式URL\(\s*(['"]?)(.*?)\s*\)
示例HTML
<a href="#"><img style="background-image: url(http://domain.com/2003-Th.jpg)"></a>
我只想做这个表达式的 not。
我不知道 netbeans ide,所以这只是一个猜测。
但请注意:您到处搜索 url(...)
。文本出现在哪里并不重要:在 css 块中,在 html 样式属性中,在 javascript 中,但也可以在纯文本和注释中!
一般修改
如果您真的只想包含背景图片,您也应该在正则表达式中说明这一点。于是就变成了
\bbackground-image\s*:\s*URL\(\s*(['"]?)(.*?)\s*\)
为了加快速度(至少在某些实现中),请尝试防止反向引用。在这种情况下
\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)
有点多,但至少在 sublime text 中是值得的。
使用
要替换背景图像中除 url 之外的所有内容,您可以使用单个正则表达式
[\s\S]*?\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)|[\s\S]+
并将所有内容替换为 \n
。最后(几乎)总是有两个 \n
,但我认为这应该没问题。
这在一些正则表达式引擎中不起作用,在这些引擎中,不是元素的顺序是决定性的,而是匹配的长度。
不过,如果有问题,你可以尝试使用
[\s\S]*?\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)[\s\S]*?(?=\z|\bbackground-image\s*:\s*URL\(\s*(?:'[^']+'|"[^"]+"|[^)]+)\s*\))
并将所有内容替换为 \n
。
[\s\S]
表示每个字符(包括\n
)
\b
是一个单词边界
(?= ... )
是一个积极的前瞻。它必须匹配但不是结果的一部分
\z
是文末
(也许您需要稍微调整正则表达式以适应 netbeans)
无论如何,并不是每个正则表达式实现都支持先行。如果 netbeans 不支持,则必须使用多步骤方法:
第一步
替换
[\s\S]*?\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)
和>-BG-URL:\n
.
>-BG-URL:
是表示值并将它们与其他值区分开来的东西。
第二步
在最后一场比赛之后手动替换所有内容(那时您不需要 --BG-URL
)或替换
^>-BG-URL:(.*)|^[\s\S]+
和
我有以下 regex
可以在我的 HTML 中找到所有背景样式 URL。我正在尝试去除除背景图片 URL 之外的所有 HTML。我的目标是从我的 HTML 页面中抽象出一个背景图片 URL 列表。
表达式URL\(\s*(['"]?)(.*?)\s*\)
示例HTML
<a href="#"><img style="background-image: url(http://domain.com/2003-Th.jpg)"></a>
我只想做这个表达式的 not。
我不知道 netbeans ide,所以这只是一个猜测。
但请注意:您到处搜索 url(...)
。文本出现在哪里并不重要:在 css 块中,在 html 样式属性中,在 javascript 中,但也可以在纯文本和注释中!
一般修改
如果您真的只想包含背景图片,您也应该在正则表达式中说明这一点。于是就变成了
\bbackground-image\s*:\s*URL\(\s*(['"]?)(.*?)\s*\)
为了加快速度(至少在某些实现中),请尝试防止反向引用。在这种情况下
\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)
有点多,但至少在 sublime text 中是值得的。
使用
要替换背景图像中除 url 之外的所有内容,您可以使用单个正则表达式
[\s\S]*?\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)|[\s\S]+
并将所有内容替换为 \n
。最后(几乎)总是有两个 \n
,但我认为这应该没问题。
这在一些正则表达式引擎中不起作用,在这些引擎中,不是元素的顺序是决定性的,而是匹配的长度。
不过,如果有问题,你可以尝试使用
[\s\S]*?\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)[\s\S]*?(?=\z|\bbackground-image\s*:\s*URL\(\s*(?:'[^']+'|"[^"]+"|[^)]+)\s*\))
并将所有内容替换为 \n
。
[\s\S]
表示每个字符(包括\n
)\b
是一个单词边界(?= ... )
是一个积极的前瞻。它必须匹配但不是结果的一部分\z
是文末
(也许您需要稍微调整正则表达式以适应 netbeans)
无论如何,并不是每个正则表达式实现都支持先行。如果 netbeans 不支持,则必须使用多步骤方法:
第一步
替换
[\s\S]*?\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)
和>-BG-URL:\n
.
>-BG-URL:
是表示值并将它们与其他值区分开来的东西。
第二步
在最后一场比赛之后手动替换所有内容(那时您不需要 --BG-URL
)或替换
^>-BG-URL:(.*)|^[\s\S]+
和