JavaScript正则表达式匹配将输入作为前两个索引返回

JavaScript Regular Expression Match Return the Input as the First 2 Indexies

本文关键字:两个 返回 索引 正则表达式 输入 JavaScript      更新时间:2023-09-26

我刚刚开始使用JavaScript中的正则表达式(以及一般情况),我遇到了一个奇怪的问题,我似乎找不到使用谷歌的解释。

在不涉及太多细节的情况下,我使用以下表达式:

/(^sw:'s?(-?'d{1,3}.'d{1,6})'sne:'s?(-?'d{1,3}.'d{1,6})$)/i

与用户输入匹配,如:

sw: -27.990344 ne: 150.234562

具有以下console.log输出:

["sw: -27.345455 ne: 180.234567", "sw: -27.345455 ne: 180.234567", "-27.345455", "180.234567"]
0 "sw: -27.345455 ne: 180.234567"   
1 "sw: -27.345455 ne: 180.234567"   
2 "-27.345455"  
3 "180.234567"
index 0
input "sw: -27.345455 ne: 180.234567"

我的问题是:为什么索引0和1返回用户提供的输入,而我希望返回的实际数据是索引2和3?

我认为这与我的表情有关,但对它的了解还不够,无法确定它不仅仅是正常的行为。

感谢您的帮助。

索引0始终完全匹配,捕获组从索引1开始。

捕获组按其开口括号编号,第一开口括号为组1,第二开口括号为第2。。。

你的完整表达式周围有括号,所以这是第一个捕获组。===>这个外括号是不需要的,您可以删除它们,然后您的组将从索引1开始。

有关捕获组的更多信息,您可以访问http://www.regular-expressions.info,这是一个非常好的regex资源。

答案在于正则表达式处理匹配分组的方式。在大多数实现中,组0将包含整个输入文本,而组1..n将包含任何用户定义的组匹配。但是,在您的情况下,您已经将整个表达式包装在一个组中,因此组1和组0将返回整个输入字符串,前提是可以找到匹配项。