用于更新背景= URL 的正则表达式

RegEx to update background= URLs

我想做的是更新文档中 HTML 背景标签的 URL。仅应更新本地 URL 的警告,因此应忽略任何以 http 开头的内容。

我要实现的正则表达式需要替换文件名和扩展名之前的路径。例如:

background="image.gif"
background="/image.gif"
background="images/image.gif"
background="images/directory/image.gif"

应该全部输出为:

background="/mydirectory/image.gif"

一如既往,输入文件中可能同时使用了单引号或双引号。

我已经有一个现有的正则表达式,它正在为 CSS 图像引用做非常相似的工作。正则表达式是:

url\((?:\'|\"")?(?!(?:http|ftp))(?<path>.+)\/(?<filename>.*?)?\)

我以为我可以用 background= 替换 url() 匹配项,但到目前为止我还没有成功。

非常感谢任何帮助。

See demo here 正则表达式 background=['"](?!\s*(http|ftp):\/\/)(?:[^'"]*\/)*(?<filename>[^'"]+)['"]

详情:

  • baground=字面匹配'background='
  • ['"] 匹配任何引用
  • (?!\s*(http|ftp):\/\/) 确保引号后没有 http:// 或 ftp://(即使前面有空格)
  • (?:[^'"]*\/)* 匹配路径,直到文件名仍在引号内 [^'"]*\/ 包含在非捕获组中 (?:) 可以重复 0 次或更多次 *(可以替换为 ?,因为它实际上会匹配全部或不匹配)
  • (?<filename>[^'"]+) 在捕获组文件名
  • 中捕获任何非引号(并且 + 量词非空)
  • ['"] 匹配最后一个引号以避免捕获它

旧答案(以防万一): See demo here

正则表达式是:background=['"](?!\s*(http|ftp):\/\/)\/?(?<filename>[^'"]*)['"]

详情:

  • baground=字面匹配'background='
  • ['"] 匹配任何引用
  • (?!\s*(http|ftp):\/\/) 确保引号后没有 http:// 或 ftp://(即使前面有空格)
  • \/? 匹配前导 / 以避免在存在时捕获它
  • (?<filename>[^'"]*) 在捕获组文件名中捕获任何不是引号的内容
  • ['"] 匹配最后一个引号以避免捕获它

看demo替换,但是思路是用/mydir/${filename}替换