我不知道 netbeans ide,所以这只是一个猜测。
但请注意:您到处搜索url(...)。文本出现在哪里并不重要:在 css 块中、在 html 样式属性中、在 javascript 中,也可以在纯文本和 cmets 中!
一般修改
如果你真的只想包含背景图片,你也应该在你的正则表达式中声明。于是就变成了
\bbackground-image\s*:\s*URL\(\s*(['"]?)(.*?)\1\s*\)
为了加快速度(至少在某些实现中),请尽量防止反向引用。在这种情况下
\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)
有点多,但至少在崇高的文本中是值得的。
使用
要替换除背景图像中的网址之外的所有内容,您可以使用单个正则表达式
[\s\S]*?\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)|[\s\S]+
并将所有内容替换为$1$2$3\n。最后(几乎)总是有两个\n,但我认为应该没问题。
这在某些正则表达式引擎中不起作用,其中元素的顺序不是决定性的,而是匹配的长度。
不过如果有问题,可以尝试使用
[\s\S]*?\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)[\s\S]*?(?=\z|\bbackground-image\s*:\s*URL\(\s*(?:'[^']+'|"[^"]+"|[^)]+)\s*\))
并将所有内容替换为$1$2$3\n。
-
[\s\S] 表示每个字符(包括\n)
-
\b 是单词边界
-
(?= ... ) 是一个积极的前瞻性。它必须匹配,但不是结果的一部分
-
\z是正文的结尾
(也许你需要稍微调整一下正则表达式以适应 netbeans)
无论如何,并不是每个正则表达式实现都支持前瞻。如果 netbeans 不支持,则必须使用多步骤方法:
第一步
替换
[\s\S]*?\bbackground-image\s*:\s*URL\(\s*(?:'([^']+)'|"([^"]+)"|([^)]+))\s*\)
>-BG-URL:$1$2$3\n.
>-BG-URL: 用于指示值并将它们与其他值区分开来。
第二步
在最后一场比赛之后手动替换所有内容(那时你不需要--BG-URL)或替换
^>-BG-URL:(.*)|^[\s\S]+
$1