使用 regex literal [MDN] :
var reg = /\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g;
RegExp [MDN] 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
并且括号 ()
仍然被视为特殊字符。
更新: .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],
...
]
当然,如果你想要将值作为字符串而不是数字,你可以省略 +
.