我需要使用RegEx来查找要通过Grunt任务替换的字符串。
我想将本地引用的图片网址与其外部网址互换。文件结构在本地和外部都是相同的。
我需要在网址开头寻找/img
或img
(在img
代码的src
属性或CSS规则中)并交换外部网址。
E.g。查找/img/some-photo.jpg
或img/some-photo.jpg
并将/img
或img
替换为https://www.example.com/some-photo.jpg
。
我不能单独查找img
,因为它也会匹配以下HTML <img .../>
中的字符串,将标记转换为<https://www.example.com .../>
。
我可以像这样排除img
标记:
/\/img|(^|[^\<])img/gim
但这也匹配,例如:
(img
'img
"img
等
我不想在这些示例中排除字符串img
,我只是不想捕获前面的字符((
,'
,{{1}等等。)
您可以在此处查看此操作:https://regexr.com/3qbeq
答案 0 :(得分:0)
看起来您需要查看负面的lookbehind,或者如果您的代码始终用单引号或双引号括起属性,请包括那些。
负面的后视解决方案类似于(?<!\<)img
,它应匹配任何前面没有img
的字符串<
。快速上网搜索“负面观察”将产生许多例子。在正则表达式掌握中,前瞻和外观是一种“升级”。
或者,只需添加引号和斜杠的条件。 "\/?img
将匹配属性但不匹配标记,因为标记不以引号开头。同样,这仅在您用引号括起所有属性时才有效。也许不像看起来那样优雅或失败,但也可能做到这一点。
答案 1 :(得分:0)
我非常想过这个问题。
如果图像都在目录img
中,那么我的后面跟着正斜杠。标签(以及像img {}
这样的CSS规则)后面没有正斜杠,因此我只需查找img/
或/img
/。的匹配项。 / p>
这可以通过/(\/?img\/)/gi
轻松实现。