为了账号安全,请及时绑定邮箱和手机立即绑定

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

为什么这个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方法中调用此方法。我找了很多次了,但我找不到为什么这不管用。非常感谢!
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

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

这意味着表达式试图匹配/sg字面上和父母()仍被视为特殊人物。


最新情况: .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], 
    ...]

当然,如果您希望将值作为字符串而不是数字,则只需省略+.


查看完整回答
反对 回复 2019-06-25
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

虽然这是一个很老的答案,但它确实帮助我完成了我的表单验证。额外的“\”在“\”。“在结束时这样做:) 

查看完整回答
反对 回复 2019-06-25
  • 2 回答
  • 0 关注
  • 502 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信