我想将'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 :)。
答案 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"]