我要做的是更新文档中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()匹配,但到目前为止我还没有成功。
任何帮助都非常有用。
答案 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}}