2017-03-07 4 views
0

でarray.split I次の文字列を持っている:javascriptの - 先読み

'(POINT (10 5),POINT EMPTY,LINESTRING (5 6, 15 17, 8 9),LINESTRING EMPTY,POLYGON ((55 1, 7 6, 90 99, 33 5, 55 1), (55 1, 7 6, 90 99, 33 5, 55 1)),POLYGON ((55 1, 7 6, 90 99, 33 5, 55 1)),POLYGON EMPTY,MULTIPOINT (55 1, 7 6, 90 99, 33 5, 55 1),MULTIPOINT EMPTY,MULTILINESTRING ((5 6, 15 17, 8 9), (5 6, 15 17, 8 9), (5 6, 15 17, 8 9)),MULTILINESTRING EMPTY,MULTIPOLYGON (((55 1, 7 6, 90 99, 33 5, 55 1)),, ((55 1, 7 6, 90 99, 33 5, 55 1), (55 1, 7 6, 90 99, 33 5, 55 1))),MULTIPOLYGON EMPTY)', 

私は文字列の配列にこれを分割したい、とセパレータは),[A-Z]をする必要があります。 (so ),の後ろに大文字)

しかし、私もセパレータを失いたくはありません。

この質問を見た後:JavaScript Split without losing character

は、私が試した:

let string = '(POINT (10 5),POINT EMPTY,LINESTRING (5 6, 15 17, 8 9),LINESTRING EMPTY,POLYGON ((55 1, 7 6, 90 99, 33 5, 55 1), (55 1, 7 6, 90 99, 33 5, 55 1)),POLYGON ((55 1, 7 6, 90 99, 33 5, 55 1)),POLYGON EMPTY,MULTIPOINT (55 1, 7 6, 90 99, 33 5, 55 1),MULTIPOINT EMPTY,MULTILINESTRING ((5 6, 15 17, 8 9), (5 6, 15 17, 8 9), (5 6, 15 17, 8 9)),MULTILINESTRING EMPTY,MULTIPOLYGON (((55 1, 7 6, 90 99, 33 5, 55 1)),, ((55 1, 7 6, 90 99, 33 5, 55 1), (55 1, 7 6, 90 99, 33 5, 55 1))),MULTIPOLYGON EMPTY)' 
let stringArray = string.split(/(?=\),[A-Z]\)/); 

しかし、これは動作しません。私は間違って何をしていますか?正規表現ですか?

所望の出力は次のようになります、それを解決する方法の方法

['(POINT (10 5)', 
'POINT EMPTY', 
'POLYGON ((55 1, 7 6, 90 99, 33 5, 55 1), (55 1, 7 6, 90 99, 33 5, 55 1))', 
'MULTIPOINT (55 1, 7 6, 90 99, 33 5, 55 1)', 
'MULTIPOINT EMPTY', 
... 
] 
+0

あなたの質問に所望の出力を入力してください。 – gabry

+0

@gabry sry、質問 –

答えて

1

つ肯定先読み?=および非キャプチャグループ?:を使用することになります。

およそRegExp

let string = 'GEOMETRYCOLLECTION (POINT (10 5),POINT EMPTY,LINESTRING (5 6, 15 17, 8 9),LINESTRING EMPTY,POLYGON ((55 1, 7 6, 90 99, 33 5, 55 1), (55 1, 7 6, 90 99, 33 5, 55 1)),POLYGON ((55 1, 7 6, 90 99, 33 5, 55 1)),POLYGON EMPTY,MULTIPOINT (55 1, 7 6, 90 99, 33 5, 55 1),MULTIPOINT EMPTY,MULTILINESTRING ((5 6, 15 17, 8 9), (5 6, 15 17, 8 9), (5 6, 15 17, 8 9)),MULTILINESTRING EMPTY,MULTIPOLYGON (((55 1, 7 6, 90 99, 33 5, 55 1)),, ((55 1, 7 6, 90 99, 33 5, 55 1), (55 1, 7 6, 90 99, 33 5, 55 1))),MULTIPOLYGON EMPTY)' 
 
let stringArray = string.split(/(?:\,)(?=[A-Z])/); 
 

 
console.log(stringArray);

+0

を編集しましたこれは私が探していたものです。正規表現がどのように機能するのか、私は完全に理解していないので説明してください(私は何か分からない:\と? –