使用正则表达式文字[MDN]
:
var reg = /(s*([0-9.-]+)s*,s([0-9.-]+)s*)/g;
使用
RegExpMDN时出现两个错误:
- “定界符”
/
不应该是表达式的一部分 - 如果将表达式定义为字符串,则必须转义反斜杠,因为它是字符串中的转义字符
此外,修饰符作为第二个参数传递给函数。
因此,如果您要使用
RegExp(在这种情况下不必使用),则等效项为:
var reg = new RegExp("\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)", "g");(我想现在您知道为什么正则表达式文字更方便了)
我总是发现
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], ...]
当然,如果您希望这些值是字符串而不是数字,则可以省略
+。



