RegEx更新background = URL

时间:2015-01-09 15:57:25

标签: regex

我要做的是更新文档中HTML背景标记的网址。应该更新只有本地URL的警告,因此应该忽略任何以http开头的内容。

RegEx我试图实现在文件名和文件之前替换路径的需要。延期。例如:

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

应该全部输出为:

background="/mydirectory/image.gif"

与往常一样,输入文件中可能使用了单引号或双引号。

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

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

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

任何帮助都非常有用。

1 个答案:

答案 0 :(得分:0)

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

详情:

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

旧答案(如果有兴趣的话): See demo here

正则表达式是:baground=

详情:

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

请参阅演示进行替换,但想法是替换为{{1}}