0

问题来了,比赛一定不能同时匹配(anything)(anything),只能匹配第一组。

这是 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'));
});
4

2 回答 2

0

对我来说看起来几乎像 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;

小提琴

于 2013-08-01T19:59:28.397 回答
0

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

换行:

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

if (val) return val[1]; //null is falsey
于 2013-08-01T20:05:24.977 回答