javascript - 带前瞻功能的 array.split

标签 javascript arrays

我有以下字符串:

'(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]。 (所以),后跟一个大写字母)

但我也不想丢失分隔符。

看完这个问题: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',
...
]

最佳答案

解决该问题的方法之一是使用正向前瞻 ?= 和非捕获组 ?:

关于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);

关于javascript - 带前瞻功能的 array.split,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42652605/

相关文章:

arrays - 在 Swift 中,如何在 PFQueryTableViewController 上执行一个查询先于另一个查询?

php - 避免在 PHP 中显示来自数据库的重复结果

arrays - 相对于数组的两端对数组进行切片的惯用方法是什么?

c++ - 如何获取大小c++动态数组

javascript - 从 Promise 构造函数返回值

javascript - 如何使用 Uber 的 "react-map-gl"库绘制静态标记?

javascript - 在Javascript中使用 "Immediately invoked function expression"时如何扩展命名空间?

java - 可以数组。 sort 对已添加到数组中的枚举进行排序。?

javascript - Flash音频播放器的html元素

javascript - 基于左右控制和摩擦力的jQuery圆形动画