RegEx仅匹配URL中的字符串'img'(例如,不是标记名称)

时间:2018-05-31 14:21:16

标签: javascript regex replace

我需要使用RegEx来查找要通过Grunt任务替换的字符串。

我想将本地引用的图片网址与其外部网址互换。文件结构在本地和外部都是相同的。

我需要在网址开头寻找/imgimg(在img代码的src属性或CSS规则中)并交换外部网址。

E.g。查找/img/some-photo.jpgimg/some-photo.jpg并将/imgimg替换为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

2 个答案:

答案 0 :(得分:0)

看起来您需要查看负面的lookbehind,或者如果您的代码始终用单引号或双引号括起属性,请包括那些。

负面的后视解决方案类似于(?<!\<)img,它应匹配任何前面没有img的字符串<。快速上网搜索“负面观察”将产生许多例子。在正则表达式掌握中,前瞻和外观是一种“升级”。

或者,只需添加引号和斜杠的条件。 "\/?img将匹配属性但不匹配标记,因为标记不以引号开头。同样,这仅在您用引号括起所有属性时才有效。也许不像看起来那样优雅或失败,但也可能做到这一点。

答案 1 :(得分:0)

我非常想过这个问题。

如果图像都在目录img中,那么我的后面跟着正斜杠。标签(以及像img {}这样的CSS规则)后面没有正斜杠,因此我只需查找img//img /。的匹配项。 / p>

这可以通过/(\/?img\/)/gi轻松实现。