JavaScript 正则表达式失败分析
当遇到 JavaScript 正则表达式的 null 结果时,深入研究表达式背后的复杂性非常重要。让我们检查一下为什么从逗号分隔的字符串中提取坐标的特定正则表达式没有产生匹配项:
正则表达式构造缺陷:
有问题的正则表达式定义为:
new RegExp("/\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g")
相反,正则表达式文字应该是使用:
var reg = /\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g;
正则表达式输出分析:
为了更好了解正则表达式,可以使用控制台输出其模式:
/(s*([0-9.-]+)s*,s([0-9.-]+)s*)/g
这表明表达式将匹配文字“s”、“g”和括号,这不是预期的行为。
数组输出注意事项:
值得注意的是 match() 返回一个数组匹配数:
["(25.774252, -80.190262)", "(18.466465, -66.118292)", ... ]
要提取单个数字,应使用 exec():
["(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]]); }
此代码将创建一个数组数组,其中包含提取的数字坐标。
以上是为什么我的 JavaScript 正则表达式无法提取坐标?的详细内容。更多信息请关注PHP中文网其他相关文章!