匹配含空格MGRS坐标的REGEX规则偶发跳过多条条目问题求助
问题根因
你写的第二个适配带空格坐标的正则存在两个核心错误:
- 量词逻辑错误:分组
([0-9]{0,5}\s?[0-9]){0,5}的规则会贪婪匹配尽可能多的数字和中间空格,当多个坐标用空格分隔时,正则会把下一个坐标开头的数字也吞到当前匹配的分组里,导致下一个坐标匹配失败 - 边界缺失:没有明确坐标的匹配边界,全局匹配(带
g修饰符)时,上一次匹配的结束位置会落到下一个坐标的中间位置,自然就会出现隔一个跳过一个的情况;加逗号的时候因为逗号不属于你规则里的匹配字符,相当于天然做了边界分割,所以不会出问题
修复方案
修正后的带空格MGRS坐标正则
/\d{1,2}[^ABIOYZabioyz]\s?[A-Za-z]{2}\s?(\d{1,5}\s?\d{1,5})(?=\s|,|$)/g
修正点说明
- 把之前逻辑混乱的数字分组改成了明确的
\d{1,5}\s?\d{1,5},符合MGRS坐标东向/北向数字位长度对等的规则,不会多吞后续坐标的数字 - 末尾加了正向零宽断言
(?=\s|,|$),明确匹配到下一个分隔符(空格、逗号)或者字符串结尾就停止,不会越界匹配 - 数字位的量词从
{0,}改成了{1,},避免匹配到无数字的无效坐标
内容的提问来源于stack exchange,提问作者abristow
相关产品推荐
相关产品推荐

