【问题标题】:Need to match <template>(anything)</template>需要匹配 <template>(anything)</template>
【发布时间】:2013-08-02 22:05:46
【问题描述】:

问题来了, 匹配不能也匹配 (任何事物) (任何东西),只有第一组。

这是我在解决这个问题时遇到的问题的 jsFiddle。

http://jsfiddle.net/UFTR2/

var templates = '<template mini-dash-ytd>'+
                    '<span class="mini-dash-title">{{title}}</span>'+
                    '<span class="mini-dash-metric">{{value}}</span>'+
                '</template>'+
                '<template mini-dash-yesterday>'+
                    '<span class="mini-dash-title">{{title}}</span>'+
                    '<span class="mini-dash-metric">{{value}}<span class="mini-dash-performance-{{performance}}"></span></span>'+
                '</template>';

function templatitFind(string) {
    var regex = new RegExp("<template\\s+"+string+">([^;]*)</template>","ig");
    var val = templates.match(regex);
    if (val !== null) return val[0];
}

$(function () {
    console.log(templatitFind('mini-dash-ytd'));
});

【问题讨论】:

    标签: javascript jquery regex templating


    【解决方案1】:

    在我看来几乎像 HTML,那么为什么需要正则表达式?

    var templates = '<template mini-dash-ytd>'+
                      '<span class="mini-dash-title">{{title}}</span>'+
                      '<span class="mini-dash-metric">{{value}}</span>'+
                    '</template>'+
                    '<template mini-dash-yesterday>'+
                      '<span class="mini-dash-title">{{title}}</span>'+
                      '<span class="mini-dash-metric">{{value}}<span class="mini-dash-performance-{{performance}}"></span></span>'+
                    '</template>';
    
    var elems = $('<div />').append(templates);
    var first = elems.find('template[mini-dash-ytd]').get(0).outerHTML;
    

    FIDDLE

    【讨论】:

    • 我从把它变成一个元素开始。但是当我有 {{if elem id="{{elem}} endif}} - 字符串将被更改为我无法使用的东西。
    【解决方案2】:

    虽然 adeneo 将其解析为 HTML 是正确的,但您也可以通过使重复运算符变得惰性并删除全局标志来解决您的问题。此外,生成的匹配数组中的第一个元素始终是完整的表达式匹配。您需要获取第二个元素才能仅获取捕获组的内容。

    换行:

    var regex = new RegExp("<template\\s+"+string+">([^;]*?)</template>","i");
    

    if (val) return val[1]; //null is falsey
    

    【讨论】:

    • 一个问题:jsfiddle.net/UFTR2/3 -- 当匹配之间只有一行代码时它会失败。
    • @user1529598,它不起作用,因为最后一个模板包含;,您的捕获组没有捕获它。您可以更改您的捕获组以捕获所有字符(.*?),它将起作用。但是,请确保您也使用 val[1] 元素而不是 val[0]
    • 这行得通,我还必须做的另一件事是删除文本上的所有行尾字符:templates = i.replace(/(\r\n|\n |\r)/gm,'');在处理之前。
    猜你喜欢
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2018-04-30
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多