如何使用正则表达式在字符串中返回2个单独的{{...}}块?

时间:2016-07-15 16:47:24

标签: javascript regex

我有一个字符串:

$('#menu-link').click(function(){
  var menuActive = $('#menu-link').data('active');

  if(menuActive) {
    $('#menu-link').toggleClass('slideOut');
    $('nav').toggleClass('slideOut');
    $('#menu-link').removeClass('active');
 } else { 
    $('#menu-link').toggleClass('slideIn');
    $('nav').toggleClass('slideIn');
    $('#menu-link').data('active', true);
  }
});

这是我目前的正则表达式模式:

string = "{{1:123}} asdfadfasdfdfdfsaf {{1212:}}"

当使用匹配时,我得到:

var pattern = /[{{].*[}}]/;

如何获得第一个支架块,或者更好的是,得到一个包含每个支架块的数组?我理想的回归结果是:

string.match(pattern)
//returns ["{{1:123}} asdfadfasdfdfdfsaf {{1212:}}"]

1 个答案:

答案 0 :(得分:2)

您需要删除方括号并使用延迟量词:

var pattern = /{{.*?}}/g;

请参阅demo

[{{]只匹配一个{,因为它是一个字符类。与[}}]相同,它与1 }匹配。详细了解character classes

.*匹配尽可能多的换行符之外的任何字符,如果您使用它,您将获得从第一个{{到最后}}的子字符串。延迟量词将与第一个}}匹配。另请参阅What do lazy and greedy mean in the context of regular expressions,尤其是Lazy Quantifier Solution

var re = /{{.*?}}/g; 
var str = '{{1:123}} asdfadfasdfdfdfsaf {{1212:}}';
console.log(str.match(re));