正则表达式匹配多个组

时间:2014-09-13 03:48:02

标签: javascript regex

我对正则表达式非常不满意。我有这个字符串与令牌,我想分成数组。例如:

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}}}"]

不完全是我想要的。

感谢您的帮助!

3 个答案:

答案 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)

怎么样:

Online Demo

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}这个词,它使用|

分为2
  • |表示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}}将与剩余部分中的[^{}]+{的所有字符匹配一次或多次。