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是一门很难学的语言,但一旦你知道了基础知识,它就会变得容易得多。