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で試してみましたが、1行でも実行できると思います。

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

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

優先順位を正しくするには、replace関数を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}21-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 に答える