1

我想'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 包装起来即可正确使用偏好顺序。

我想我更喜欢 js :)

4

2 回答 2

4

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

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

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

// ["9088", "2-12", "1-729"]
于 2012-11-14T20:22:09.720 回答
2

您可以使用简单的零宽度正前瞻/(?={)/

'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"]
于 2012-11-14T20:35:37.440 回答