我对正则表达式非常不满意。我有这个字符串与令牌,我想分成数组。例如:
var someStr = "Hello {{{user.fname}}} {{{user.lname}}}, how are you. {{{someVar}}}"
分裂成;
var result = ["Hello ", "{{{user.fname}}}}", " ", "{{{user.lname}}}", ", how are you. ", "{{{someVar}}}"]
到目前为止,我尝试someStr.match(/(.*?)({{{(.*?)}}})(.*?)/g)
导致:
["Hello {{{user.fname}}}", " {{{user.lname}}}", ", how are you. {{{someVar}}}"]
不完全是我想要的。
感谢您的帮助!
答案 0 :(得分:2)
你也可以考虑split
你的字符串。
var s = 'Hello {{{user.fname}}} {{{user.lname}}}, how are you. {{{someVar}}}',
r = s.split(/({{{[^}]+}}})/).filter(Boolean);
console.log(r);
[ 'Hello ',
'{{{user.fname}}}',
' ',
'{{{user.lname}}}',
', how are you. ',
'{{{someVar}}}' ]
答案 1 :(得分:1)
怎么样:
var re = /[^{}]+|[{]{3}[^}]+[}]{3}/g;
var str = 'Hello {{{user.fname}}} {{{user.lname}}}, how are you. {{{someVar}}}';
str.match(re);
//outputs ["Hello ", "{{{user.fname}}}", " ", "{{{user.lname}}}", ", how are you. ", "{{{someVar}}}"]
正如您可能已注意到[^{}]+|[{]{3}[^}]+[}]{3}
这个词,它使用|
|
表示OR [^{}]+
它匹配所有未启动的字符{}
它也可能与[\w\.\s,]+
所需的完全匹配[{]{3}[^}]+[}]{3}
表达式的第二部分与3 {{{
}}}
答案 2 :(得分:1)
你可以试试下面的正则表达式,
> var someStr = "Hello {{{user.fname}}} {{{user.lname}}}, how are you. {{{someVar}}}"
> someStr.match(/{{{[^}]*}}}|[^{}]+/g)
[ 'Hello ',
'{{{user.fname}}}',
' ',
'{{{user.lname}}}',
', how are you. ',
'{{{someVar}}}' ]
此{{{[^}]*}}}
正则表达式将匹配以{{{
开头并以}}}
,|
( OR )结尾的所有字符串{{ 1}}将与剩余部分中的[^{}]+
或{
的所有字符匹配一次或多次。