猿问

为什么这个javascript regex不能工作?

为什么这个javascript regex不能工作?

我正在做一个小的javascript方法,它接收一个点的列表,我必须读取这些点来在Google地图中创建一个多边形。

我收到表格上的以下要点:

(lat,long),(lat,long)

因此,我做了以下正则表达式:

\(\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错误(使用GoogleChrome的调试模式)。此代码托管在javascript函数中,该函数位于包含的JS文件中。在onload方法中调用此方法。

我找了很多次了,但我找不到为什么这不管用。非常感谢!


守着星空守着你
浏览 508回答 2
微课
2回答

喵喔喔

用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");(我想你现在明白为什么regex文字更方便了)我总是觉得复制和过去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],      ...]当然,如果您希望将值作为字符串而不是数字,则只需省略+.

慕妹3242003

虽然这是一个很老的答案,但它确实帮助我完成了我的表单验证。额外的“\”在“\”。“在结束时这样做:) 
随时随地看视频慕课网APP
我要回答