正则表达式查找具有未包含在链接中的属性的图像

时间:2017-02-08 22:51:45

标签: javascript jquery regex

我正在制作一个正则表达式,如果它是真的,会进行一些字符串操作,但目前我的代码经常被触发,所以我需要它更具体。正则表达式真的不是我强大的套件 - 我目前的正则表达式是

if(/(?!<a(.*?))<img src="(.*?[^<])" data-special="(t:).*"/.test(str)) {
    // do this code
}

我的正则表达式需要找到具有某个属性值的img元素,这些元素值不会被包含在链接中的href /包围。例如,我希望它捕获以下内容:

<img src="http://example.com/image.jpg" data-special="t:https://www.twitter.com" />

并将其替换为

<a href="http://example.com/"><img src="http://example.com/image.jpg" data-special="t:https://www.twitter.com" /></a>

因此if语句只有在img属性存在且包含data-special后跟任何链接的字符串中有t:标记时才会为真。感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

在您的简单情况下,使用:not()选择器和.wrap()函数就足够了:

&#13;
&#13;
$('*:not(a) > img[data-special^="t:"]').wrap('<a href="http://example.com/"></a>');
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img src="http://example.com/image1.jpg" data-special="t:https://www.twitter.com" />
<a href=""><img src="http://example.com/image4.jpg" data-special="t:https://www.twitter.com" /></a>
<img src="http://example.com/image2.jpg" data-special="t:https://www.twitter.com" />
<img src="http://example.com/image3.jpg" data-special="t:https://www.twitter.com" />
&#13;
&#13;
&#13;

  

是否可以将该jQuery元素检查转换为条件   我的if语句?所以只有在有东西时才输入if-block   包裹?

var imgs = $('*:not(a) > img[data-special^="t:"]');
if (imgs.length) {
    imgs.wrap('<a href="http://example.com/"></a>');
}