Javascript 正则表达式未捕获a<;中的Url;img标签

Javascript 正则表达式未捕获a<;中的Url;img标签,javascript,regex,string,Javascript,Regex,String,背景信息 我正在使用SharePoint和我正在创建的Office.Js加载项。项目负责人希望动态插入图像和文本,但是我从对SharePoint的ajax调用中得到的字符串只会将URL带到img标记中。这是一个字符串,我正在使用它来标记它 for (var x = 0; x < imageToInsert.length; x++) { seetest = imageToInsert[x].search("<img");

背景信息

我正在使用SharePoint和我正在创建的Office.Js加载项。项目负责人希望动态插入图像和文本,但是我从对SharePoint的ajax调用中得到的字符串只会将URL带到img标记中。这是一个字符串,我正在使用它来标记它

            for (var x = 0; x < imageToInsert.length; x++) {

            seetest = imageToInsert[x].search("<img");

            if (seetest >= 0)
            {
                cleanedB64 = imageToInsert[x].toString().replace('~~end~~', '');
                imageB64.push(cleanedB64);
            }                            
        }

        var teststop = 0;
    }
    InsertPlainText(s
for(var x=0;x ;

中得到的只是”img src=)

所需结果:

我希望在从sharepoint返回的html img标记中获得url。它使构建正则表达式变得非常简单。如果您只是在查找
/sites/ContentCenter/Graphics/map al.jpg
,请尝试类似的方法

img src="([^"]*) 
imgsrc=“(
它将对所有内容进行分组,直到下一个结束引用。

尝试一下。它使构建正则表达式变得非常简单。如果您只是在查找
/sites/ContentCenter/Graphics/map al.jpg
,请尝试类似的方法

img src="([^"]*) 

imgsrc=“(
它会将所有内容分组,直到下一个结束引用。

首先,原因是
/img src=([^]*?)
没有给你任何东西,因为你在
img src=
之后说,再分组任何东西,0次,懒惰地,除此之外什么都没有。因此,0次匹配是最懒惰的,这就是答案

第二,
[^]
是“不是
什么都不是”
。只要用
表示“任何东西”

仅供参考:所有这些公式都是指向regex101的链接

可能是最容易理解的:在
img src=“
抓取任何东西之后,懒洋洋地抓取,直到你碰到
。但是它的效率(找到解决方案的98个步骤)比

17个步骤。(捕捉所有内容,直到你点击一个
”,然后停止)(这是Justin建议的,是最佳解决方案)

如果你想把所有的东西都放在最外面的两个
之间,就像你回复贾斯汀的帖子所建议的那样

将匹配
/sites/ContentCenter/Graphics/map al.jpg“alt=“map al”style=“width:;611px;height:;262px;
这将捕获字符串中最后一个
之前的所有内容


您可能还希望引用,因为这些情况下的匹配将在捕获组1中。

首先,原因是
/img src=([^]*?)
什么都不给你,是因为你在
img src=
之后说,再多0次,懒洋洋地,什么都不给。因此,0场比赛是最懒的,这就是答案

第二,
[^]
是“不是
什么都不是”
。只要用
表示“任何东西”

仅供参考:所有这些公式都是指向regex101的链接

可能是最容易理解的:在
img src=“
抓取任何东西之后,懒洋洋地抓取,直到你碰到
。但是它的效率(找到解决方案的98个步骤)比

17个步骤。(捕捉所有内容,直到你点击一个
”,然后停止)(这是Justin建议的,是最佳解决方案)

如果你想把所有的东西都放在最外面的两个
之间,就像你回复贾斯汀的帖子所建议的那样

将匹配
/sites/ContentCenter/Graphics/map al.jpg“alt=“map al”style=“width:;611px;height:;262px;
这将捕获字符串中最后一个
之前的所有内容


您可能还想引用,因为这些情况下的匹配项将在捕获组1中。

我不确定您到底想做什么,但我假设您只是试图从SharePoint中获取的字符串中获取img src标记的该值。我认为最好的方法是将字符串分段,然后获取该值这段代码还没有经过测试,但它会让你很好地了解你想要做什么

                    var str = selectedContent.toString();
                    var n = str.split("split on Img tags");
                    var urls = [];
                    for (var i = 0; i < n.length; i++) {
                        var post_body = selectedContent;
                        var div = document.createElement('div');
                        div.innerHTML = post_body;
                        var firstImage = div.getElementsByTagName('img')[i]
                        var imgSrc = firstImage ? firstImage.src : "";
                        var rawImgSrc = firstImage ? firstImage.getAttribute("src") : "";
                        urls.push(rawImgSrc);
                    }

我不确定您到底想做什么,但我假设您只是想从SharePoint获取的字符串中获取img src标记的值。我认为最好的方法是将字符串分段,然后获取标记值。此代码尚未经过测试,但它会让您很好地了解您想要的内容去做

                    var str = selectedContent.toString();
                    var n = str.split("split on Img tags");
                    var urls = [];
                    for (var i = 0; i < n.length; i++) {
                        var post_body = selectedContent;
                        var div = document.createElement('div');
                        div.innerHTML = post_body;
                        var firstImage = div.getElementsByTagName('img')[i]
                        var imgSrc = firstImage ? firstImage.src : "";
                        var rawImgSrc = firstImage ? firstImage.getAttribute("src") : "";
                        urls.push(rawImgSrc);
                    }

要从字符串中获取URL,请尝试以下操作:

var text = '<img src="/sites/ContentCenter/Graphics/map-al.jpg" alt="map al" style="width&#58;611px;height&#58;262px;" />&#160;<br></p><p><br></p><p>'
var reg = /<img src="(.+?)"/;
var url = text.match(reg)[1];
var text=' ;


' var reg=/ 这个正则表达式查找
和下一个最近的
之间的任何内容,括号将其分组


match调用返回一个数组,其中第一个元素是匹配项,随后的每个元素都是您定义的任何组。然后,您可以使用数组表示法访问这些组。

要从字符串中获取URL,请尝试以下操作:

var text = '<img src="/sites/ContentCenter/Graphics/map-al.jpg" alt="map al" style="width&#58;611px;height&#58;262px;" />&#160;<br></p><p><br></p><p>'
var reg = /<img src="(.+?)"/;
var url = text.match(reg)[1];
var text=' ;


' var reg=/ 这个正则表达式查找
和下一个最近的
之间的任何内容,括号将其分组


match调用返回一个数组,其中第一个元素是匹配项,随后的每个元素都是您定义的任何组。然后,您可以使用数组表示法访问这些组。

您可以尝试使用文档标记:document.getElementById(“img”).src;为什么要使用正则表达式而不只是查询DOM?可能与的重复项不使用正则表达式解析HTML。您可以尝试使用文档标记:document.getElementById(“img”).src;为什么要使用正则表达式而不仅仅是查询DOM?可能是重复的不使用正则表达式解析HTML。嘿,Justin,你知道了,但是正则表达式不是捕获/sites/ContentCenter/Graphics/map-al.jpg。但是如果我将其修改为img src=“([^]*)一直到最后一句话我想你应该看看你写的正则表达式是什么意思。[^]表示匹配括号内不匹配的内容。在你的例子中,你说的是匹配如果不是空的话。[^“]将匹配任何不匹配的内容