2014-09-13 267 views
1

正則表達式與正則表達式很差。我有這個字符串,我想分割成數組。例如:正則表達式匹配多個組

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

不正是我想要得到的。

感謝您的幫助!

回答

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分它匹配所有不符合的字符RT {}它也可以完全匹配,這需要像[\w\.\s,]+
  • [{]{3}[^}]+[}]{3}表達的第二部分,即內恰好3 {{{}}}
+0

,它看起來像我的:-) – 2014-09-13 04:02:58

+0

@AvinashRaj看不出來,但我的答案是先但感謝支持我的回答是有效的 – Dalorzo 2014-09-13 04:04:50

+1

@Dalorzo他的意思是,你的編輯他的回答後,來到 – Christophe 2014-09-13 04:07:41

1

你可以試試下面的正則表達式中的字符,匹配

> var someStr = "Hello {{{user.fname}}} {{{user.lname}}}, how are you. {{{someVar}}}" 
> someStr.match(/{{{[^}]*}}}|[^{}]+/g) 
[ 'Hello ', 
    '{{{user.fname}}}', 
    ' ', 
    '{{{user.lname}}}', 
    ', how are you. ', 
    '{{{someVar}}}' ] 

{{{[^}]*}}}正則表達式會匹配所有以{{{開始,以}}}結束串,|)此[^{}]+將匹配來自剩餘部分的一次或多次不是{}的所有字符。

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