javascript regexp split包括分隔符

时间:2012-11-14 20:16:20

标签: javascript regex lookahead

我想将'9088{2}12{1}729'拆分为[ "9088", "{2}12", "{1}729" ]

对我来说甚至更有用:[ "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}"]

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


在php中尝试过,我想你也可以在一行中完成它。

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

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

只需将split函数换成split即可使首选项顺序正确。

我想我更喜欢js :)。

2 个答案:

答案 0 :(得分:4)

  

对我来说更有用:[“9088”,“2-12”,“1-729”]

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

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

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

答案 1 :(得分: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"]