如何在javascript(instafeed.js)中提取两个大括号内的变量值?

时间:2015-10-09 09:16:22

标签: javascript jquery

我正在使用instafeed.js开发一款应用。 Instafeed为我们提供了名为" template"所以我们可以在instagram中获取有关图像的信息。例如:标题,链接,喜欢,图像等

在这种情况下,我试图提取标题的值。 我在这里尝试过:

var str = "{{caption}}";
var harga = str.substring(str.lastIndexOf("(")+1,str.lastIndexOf(")"));

仅供参考:{{caption}}值为:" MotoGP Tshirt(150)"。我的目标是获取内部值(),以便最终输出为" MotoGP Tshirt,价格:150美元"。

当我尝试这个时:

var str = "MotoGP Tshirt (150)";

完美无缺。但是当我像这样使用{{caption}}时:

var str = "{{caption}}";

它不起作用。那么如何将{{caption}}存储到变量中,以便我可以生成价格。

完整源代码:

<script type="text/javascript">
$(document).ready(function() {

var str = "{{caption}}";
var harga = str.substring(str.lastIndexOf("(")+1,str.lastIndexOf(")"));

    var userFeed = new Instafeed({
        get: 'user',
        userId: xxxxxxx,
        accessToken: 'xxxxxxxx',
        template: '<div class="col-md-3"><p><a href="{{link}}"><img src="{{image}}" width="100%" class="img img-thumbnail img-responsive img-rounded" /></a></p><p>{{caption}}</p><p><font color="#F12938"><i class="fa fa-heart"></i> {{likes}}</font></p>'+harga+'</div>',
        sortBy : 'most-recent',
        limit : 8,
        resolution : 'standard_resolution',
        filter: function(image) {
        return image.tags.indexOf('carefour') >= 0;
        }
    });
    userFeed.run();

$('#mybutton').on('click', function() {
        userFeed.next();
    });
});    

</script>

感谢您的帮助。我真的需要帮助。

2 个答案:

答案 0 :(得分:1)

请尝试以下操作,让我知道这是否有效:

$(document).ready(function() {

    var str = "{{caption}}";
    var harga = str.substring(str.lastIndexOf("(")+1,str.lastIndexOf(")"));

        var userFeed = new Instafeed({
            get: 'user',
            userId: xxxxxxx,
            accessToken: 'xxxxxxxx',
            sortBy : 'most-recent',
            limit : 8,
            resolution : 'standard_resolution',
            filter: function(image) {
                if (image.caption && image.caption.text) {
                    // Do your logic to change text and assign it to below variable
                    image.my_caption = ''; // Assign variable here
                } else {
                    image.my_caption = image.caption;
                }

                return image.tags.indexOf('carefour') >= 0;
            },
             template: '<div class="col-md-3"><p><a href="{{link}}"><img src="{{image}}" width="100%" class="img img-thumbnail img-responsive img-rounded" /></a></p><p>{{model.my_caption}}</p><p><font color="#F12938"><i class="fa fa-heart"></i> {{likes}}</font></p>'+harga+'</div>',
        });
        userFeed.run();

    $('#mybutton').on('click', function() {
            userFeed.next();
        });
    });

答案 1 :(得分:0)

正则表达式模式将从输入中获取(任何)字符串。然后你可以砍掉结果的第一个和最后一个字符,最后得到()之间的值。 如果你的数据总是以价格结尾的形式存在,你甚至不需要正则表达式,只能使用自己的函数并将第一个更改为indexOf而不是lastIndexOf。正则表达式也适用于像'Moto Helmet(120)size A'这样的字符串。如果大括号之间的数据始终是一个数字,则可以编辑正则表达式,只在需要时找到()之间的数字。

如果你想立即将字符串从'Something(150)'更新为'Something,Price:150'

,你也可以通过在字符串的replace()调用中使用正则表达式来扩展它。

编辑:如果这是你的问题,你能解释一下吗?或者是您无法将{{caption}}转换为包含价格的字符串的问题?由于您的代码并未真正解释MotoGP字符串的来源。

var pattern = /\(.*\)/,
    wrapped = pattern.exec('MotoGP Tshirt (150)'),
    result = wrapped[0].substring(1, wrapped[0].length - 1);
console.log(result);