Используйте литерал regex [MDN] :
var reg = /\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g;
Вы делаете две ошибки, когда используете RegExp
[MDN] :
/
не должны быть частью выражения Кроме того, модификаторы передаются как второй аргумент функции.
Итак, если вы хотите использовать RegExp
(который вы не используете в этом случае), эквивалент был бы следующим:
var reg = new RegExp("\\(\\s*([0-9.-]+)\\s*,\\s([0-9.-]+)\\s*\\)", "g");
(и теперь я понял, почему регулярные выражения являются более удобными)
Я всегда нахожу его полезно скопировать и пропустить выражение RegExp
в консоли и посмотреть его вывод. Принимая ваше исходное выражение, получаем:
/(s*([0-9.-]+)s*,s([0-9.-]+)s*)/g
, что означает, что выражения пытаются сопоставить /
, s
и g
буквально, а parens ()
по-прежнему рассматриваются как специальные символы .
Обновление: .match()
возвращает массив:
["(25.774252, -80.190262)", "(18.466465, -66.118292)", ... ]
, который, кажется, не очень полезен.
Вы должны использовать .exec()
[MDN] для извлечения чисел:
["(25.774252, -80.190262)", "25.774252", "-80.190262"]
Это нужно вызывать до тех пор, пока все строки не будут обрабатывается.
Пример:
var reg = /\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g;
var result, points = [];
while((result = reg.exec(polygons)) !== null) {
points.push([+result[1], +result[2]]);
}
Это создает массив массивов, а унарный плюс (+
) преобразует строки в числа:
[
[25.774252, -80.190262],
[18.466465, -66.118292],
...
]
Конечно, если вы хотите, чтобы значения как строки, а не как числа, вы можете просто опустить +
.