【发布时间】:2019-12-23 15:02:08
【问题描述】:
我的正则表达式是:
/((\&sll\=|@)(?<latitude>-?\d{1,3}\.\d*),(?<longitude>-?\d{1,3}\.\d*))?/
我想匹配以下所有 3 个字符串:
http://maps.google.com/maps?f=q&hl=en&geocode=&time=&date=&ttype=&q=21421+N.+Mdddoe+St.+Moickoe,+MI+48162&sll=77.070743,-23.1193&sspn=0.030456,0.033474&ie=UTF8&t=k&z=16&iwloc=addr&om=1
https://www.google.com/maps/place/173s10+N+Ladddel+ddddk+Dr,+Lddddd+sssss+Place,+Lfadfss,+MI+48152/@43.4353453,-45.4166187,848m/data=!3m2!1e3!4b1!4m2!3m1!1s0x8824b2772a3b2b7f:0x677087e29a57bf25?hl=en
https://www.google.com/maps/dir//57+bbbbb+Street,+adasfsf,+CT+02424
在前 2 个的情况下,经纬度命名组应该具有纬度和经度值,在第 3 个的情况下,正则表达式应该返回一个匹配项,但命名组应该是未定义的。
如果我删除 ? 一次或无运算符,它将匹配前 2 个并且具有正确的纬度和经度值。显然不会匹配第三个。另一方面,? 匹配所有三个但不填充命名组。
我怎样才能得到我想要的结果?为什么在整个东西周围加上? 不意味着匹配它,如果它在那里,如果没有,不要?
【问题讨论】:
-
1.使用 this kind of trick to parse url 和基本代码是 IMO 从更优雅地获得你想要的东西。 2. Javascript 中不存在命名捕获(除非您使用 XRegExp 库)。 3.
&和=不是正则表达式中的特殊字符,不需要转义。 -
1.对于一次性抓住快速纬度,经度来说,这太过分了。但是,无论如何,谢谢。 \n 2. Node.js 10 及更高版本已命名捕获。 3.啊!
-
不管怎样,我想多了,因为最好的办法就是单独匹配它们,并在获取组属性之前检查是否匹配...
标签: javascript regex regex-group regex-greedy