为什么这个javascript正则表达式没有';不行?
我正在做一个小的javascript方法,它接收一个点列表,我必须读取这些点来在google地图中创建一个多边形 我收到表格上的要点: (纬度,长),(纬度,长),(纬度,长) 所以我做了以下正则表达式:为什么这个javascript正则表达式没有';不行?,javascript,regex,Javascript,Regex,我正在做一个小的javascript方法,它接收一个点列表,我必须读取这些点来在google地图中创建一个多边形 我收到表格上的要点: (纬度,长),(纬度,长),(纬度,长) 所以我做了以下正则表达式: \(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\) 我已经用我收到的准确数据对其进行了测试: (25.774252, -80.190262),(18.466465, -66.118292),(32.321384, -64.75737),(25.774252, -80.1
\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)
我已经用我收到的准确数据对其进行了测试:
(25.774252, -80.190262),(18.466465, -66.118292),(32.321384, -64.75737),(25.774252, -80.190262)
而且它是有效的,那么为什么当我在javascript中包含此代码时,结果中会收到null
var polygons="(25.774252, -80.190262),(18.466465, -66.118292),(32.321384, -64.75737),(25.774252, -80.190262)";
var reg = new RegExp("/\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g");
var result = polygons.match(reg);
我在执行时没有javascript错误(使用google chrome的调试模式)。此代码托管在包含的JS文件中的javascript函数中。此方法在OnLoad方法中调用
我已经搜索了很多,但我找不到为什么这不起作用。多谢各位 使用:
使用时,您会出现两个错误:
- “分隔符”
不应是表达式的一部分/
- 如果将表达式定义为字符串,则必须转义反斜杠,因为它是字符串中的转义字符
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)", ... ]
这似乎不是很有用
您必须使用来提取数字:
["(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],
...
]
当然,如果您希望将值作为字符串而不是数字,您可以省略
+
太好了,它成功了!我不知道这个合成器。小问题:我收到一个带有结果的数组,但如何检索我捕获的内容“(…)”?(这:([0-9.-]+))我出错了,您必须保留g
修饰符。您只需使用exec
。请查看更正的版本。虽然这是一个很旧的答案,但它确实帮助我完成了表单验证。“\”处的额外“\”最后做了:)
[
[25.774252, -80.190262],
[18.466465, -66.118292],
...
]