【问题标题】:Applying regex to uri variable in javascript在javascript中将正则表达式应用于uri变量
【发布时间】:2015-07-25 05:58:36
【问题描述】:

我有以下 ajax 函数,它从 JSON 响应中返回三个图像(肖像、正方形和风景):

$.ajax({
            url: url,
            method: 'GET',
            headers: {
                "Authorization": bearerToken
            },
        }).then(function (response) {
            var obj = response;
            $("#imageid").css("border-color", "#ccc");
            $(".search-results").empty();
            for (var property in obj.entity.entries) {
                if (obj.entity.entries.hasOwnProperty(property)) {

                        var imageURI = obj.entity.entries[property].uri + "&" + imageCacheBust;
                        $(".search-results").append($("<li><a href='" + imageURI + "' target='_blank'><div class='thumbnail'><img width='30' height='30' src='" + imageURI + "' target='_blank'/></img><div class='caption'><p>" + obj.entity.entries[property].orientation + "</p></div></a></li>"));
                    }
                }

        }).fail(function (data) {
            $(".search-results").empty();
            $(".search-results").append("<p class='alert alert-danger'>Invalid ID</p>");
            $("#imageid").css("border-color", "red");
        });

LANDSCAPE 和 SQUARE 图像以 URI 格式返回,格式如下: http://xx.domain.com/api/v2/img/55527b6060b27c50d1def7b6?location=LANDSCAPE&amp;1 http://xx.domain.com/api/v2/img/55527b6060b27c50d1def7b6?location=SQUARE&amp;1

PORTRAIT 图像返回为: http://xx.domain.com/api/v2/img/5550fdfe60b27c50d1def72d&amp;43

我正在使用正则表达式来删除肖像末尾 LAST d 之后的所有内容,因为它没有使用缓存(就像其他人一样)。但是,这无法正常工作,并且图像没有显示出来。

【问题讨论】:

  • 纵向模式下d之后什么都没有
  • 放错网址并编辑。
  • 似乎该代码仅适用于非肖像图像,而对肖像图像则无任何作用。这是故意的吗?
  • 你想删除之后\d。那里有3个d
  • 当我认为您真正想要的是提取 ? 或 & 之前的最后一个路径部分时,您不能说“在 'd' 之后切入”。

标签: javascript ajax regex json


【解决方案1】:

您是否尝试过split?如果我正确阅读了您的问题,您应该可以替换它:

var regex = /[^d\/]*$/;
var imageURI = regex.exec(obj.entity.entries[property].uri);

。 . .有了这个 。 . .

var imageURI = obj.entity.entries[property].uri.split("&")[0];

这会将uri 值拆分为包含“http://xx.domain.com/api/v2/img/5550fdfe60b27c50d1def72d”和“43”的数组,然后您只需使用0 索引引用第一部分(我相信这就是您正在寻找的为)。

【讨论】:

    【解决方案2】:
    d[^d/]*$
    

    使用这个。替换为d。查看演示。

    https://regex101.com/r/mT0iE7/12

    【讨论】:

    • 问题在于,我需要保留最后一个 d,作为 URI 的一部分。
    • @Matt 你必须替换为d。所以最后一个d 将是der。参见演示。
    【解决方案3】:

    我通过参与@Ankit 想法并将图像附加到ifelse 语句中,并将第一个中的&amp; 更改为? 找到了解决方案:

    $.ajax({
            url: url,
            method: 'GET',
            headers: {
                "Authorization": bearerToken
            },
        }).then(function (response) {
            var obj = response;
            $("#imageid").css("border-color", "#ccc");
            $(".search-results").empty();
            for (var property in obj.entity.entries) {
                if (obj.entity.entries.hasOwnProperty(property)) {
                    if(obj.entity.entries[property].orientation == 'PORTRAIT'){
                        var imageURI = obj.entity.entries[property].uri + "?" + imageCacheBust;
                        $(".search-results").append($("<li><a href='" + imageURI + "' target='_blank'><div class='thumbnail'><img width='30' height='30' src='" + imageURI + "' target='_blank'/></img><div class='caption'><p>" + obj.entity.entries[property].orientation + "</p></div></a></li>"));
                    }else {
                        var imageURI = obj.entity.entries[property].uri + "&" + imageCacheBust;
                        $(".search-results").append($("<li><a href='" + imageURI + "' target='_blank'><div class='thumbnail'><img width='30' height='30' src='" + imageURI + "' target='_blank'/></img><div class='caption'><p>" + obj.entity.entries[property].orientation + "</p></div></a></li>"));
                    }
                }
            }
        }).fail(function (data) {
            $(".search-results").empty();
            $(".search-results").append("<p class='alert alert-danger'>Invalid ID</p>");
            $("#imageid").css("border-color", "red");
        });
    

    【讨论】:

    • 简单地测试查询字符串似乎是一个更健壮和更简洁的解决方案,例如 url += (url.indexOf('?')>=0 ? '&' : '?') + ' buster=' + (new Date()).getTime();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2012-11-23
    • 2015-05-03
    • 2015-01-21
    相关资源
    最近更新 更多