2012-11-14 26 views
1

我想'9088{2}12{1}729'分成[ "9088", "{2}12", "{1}729" ]JavaScript的正则表达式拆分,包括分隔符

甚至更​​多有用的对我说:[ "9088", "2-12", "1-729" ]

尝试:

'9088{2}12{1}729'.split(/\{[0-9]+\}/); => ["9088", "12", "729"] 

也试过:

'9088{2}12{1}729'.match(/\{[0-9]+\}/); => ["{2}"] 

我知道它可能涉及其他一些正则表达式包含分隔符的p字符串。


试过它在PHP中,我想你也可以在一行中做到这一点。

preg_split('/{/', preg_replace('/}/', '-', "9088{2}12{1}729")) 

Array ([0] => 9088 [1] => 2-12 [2] => 1-729) 

只需要用拆分来包装替换函数以获得正确的首选顺序。

我想我喜欢JS更:)

+0

的重复http://stackoverflow.com/questions/4514144/js-string-split-without-removing-the-delimiters –

回答

4

更加有用到我: “9088”, “2-12”, “1-729”]

它可以是使用简单的技巧完成!

"9088{2}12{1}729".replace(/\}/g,'-').split(/\{/g) 

// ["9088", "2-12", "1-729"] 
+0

失踪'?'被固定 –

+0

你的桌子上是否有一瓶迷人的:) 谢谢。 –

+0

@BruceLim接受答案,如果你认为这是答案。 –

2

您可以使用一个简单的零宽度positive lookahead/(?={)/

'9088{2}12{1}729'.split(/(?=\{)/); // => ["9088","{2}12","{1}729"] 

“零宽度”部分是指实际匹配的文本为空字符串,所以分割丢弃了什么,和先行意味着它只是所含图案之前相匹配,所以/(?=\{)/字符之间的空字符串,其中由箭头指示匹配:

9 0 8 8 { 2 } 1 2 { 1 } 7 2 9 
     ↑   ↑ 

然后,您可以使用Array.prototype.map将表格从{1}2转换为1-2

'9088{2}12{1}729'.split(/(?=\{)/) 
    .map(function (x) { return x.replace('{', '').replace('}', '-'); }); 

产生

["9088","2-12","1-729"]