Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个javascript正则表达式没有';不行?_Javascript_Regex - Fatal编程技术网

为什么这个javascript正则表达式没有';不行?

为什么这个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

我正在做一个小的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.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], 
    ...
]