Javascript-按正则表达式{{…}拆分字符串

Javascript-按正则表达式{{…}拆分字符串,javascript,jquery,regex,split,mustache,Javascript,Jquery,Regex,Split,Mustache,我有一个字符串,如下所示: My name is {{Name}} and my favorite States and Cities are: {{#each Places}}{{State}}{{City}}{{/each}} 我想将这些项拆分为一个数组,其中分隔符的格式为{…}}标记,即用双大括号包围的文本 因此,在关于我的数组的示例中: ary[0] = 'My name is ' ; ary[1] = '{{Name}}'; ary[2] = ' and my favorite St

我有一个字符串,如下所示:

My name is {{Name}} and my favorite States and Cities are: {{#each Places}}{{State}}{{City}}{{/each}}
我想将这些项拆分为一个数组,其中分隔符的格式为{…}}标记,即用双大括号包围的文本

因此,在关于我的数组的示例中:

ary[0] = 'My name is ' ;
ary[1] = '{{Name}}';
ary[2] = ' and my favorite States and Cities are: ';
ary[3] = '{#each Places}}';
ary[4] = '{{State}}';
ary[5] = '{{City}}';
ary[6] = '{{/each}}';
然后我想把从{{…}}到{{/each}的下一个实例的所有内容组合起来

因此ary[3]到ary[6]成为一个文本块:

{{#each Places}}{{State}}{{City}}{{/each}}
有人能帮我设计正则表达式和“组合器”逻辑吗

以下是我目前掌握的情况:

//Split string into array
var ary = str.split("{{SPLIT_BY_MUSTACHE_TAG_REGEX_HERE}}");

var collectionString = '';
var inCollection = false;

//Iterate through array 
$.each(ary, function( index, value ){

//Check if currently in a collection: {{#each...}} to {{/each}})
if(!inCollection) {

//Check if current value matches start of collection tag
if(value.match({{#START_OF_COLLECTION_REGEX_HERE}}) {
    inCollection = true; 
    collectionString += value; //Append value to string

} else {
    //Not at start of or inside a collection

    //Do something with open text or standalone tag: {{...}}       
}

} else {
    //Currently inside a collection

    //Append to collection string
    collectionString += value;

    //Check if end of collection: {{/each}}
    if(value.match({{/END_OF_COLLECTION_REGEX_HERE}})
        inCollection = false;
}

});
您可以尝试string.match而不是string.split函数

> var st = "My name is {{Name}} and my favorite States and Cities are: {{#each Places}}{{State}}{{City}}{{/each}}"
undefined
> st.match(/\{\{.*?\}}|.+?(?=\{{|$)/g);
[ 'My name is ',
  '{{Name}}',
  ' and my favorite States and Cities are: ',
  '{{#each Places}}',
  '{{State}}',
  '{{City}}',
  '{{/each}}' ]
\{\{.*.\}匹配包含在两个大括号(如{..})中的所有字符串

|正则表达式交替运算符或逻辑或运算符,通常用于组合两个正则表达式模式

.+??=\{{{124;$匹配任何字符一次或多次,直到{{大括号或线锚的末端


我从开始,但我被困在{{{each Places}}因为它既是{{{..}又有`空格'…有什么修正吗?你可以通过/{{[^}]*}}{{{^{}+/gyes来改进模式,但是如果op还想匹配像{{foo{bar}foo}这样的字符串呢那么OP应该说明这一点。我会开始。R是一门很难学的语言,但一旦你知道了基础知识,它就会变得容易得多。