Javascript 为什么与RegExp的非全局匹配会在我的环境中返回意外的数组?

Javascript 为什么与RegExp的非全局匹配会在我的环境中返回意外的数组?,javascript,regex,search,Javascript,Regex,Search,我必须在JavaScript中完成一个使用RegExp的练习。在测试期间,我在进行非全局匹配时偶然发现了这个返回的数组 var first = "28".match(/[0-9]\s?/); console.log(first); 在我的终端中返回此数组: [ '2', index: 0, input: '28' ] (我知道需要一个数组。但我希望得到[“2”]) 另外,我注意到运行全局匹配确实会返回预期的数组 var first = "28".match(/[0-9]/g); consol

我必须在JavaScript中完成一个使用RegExp的练习。在测试期间,我在进行非全局匹配时偶然发现了这个返回的数组

var first = "28".match(/[0-9]\s?/);
console.log(first);
在我的终端中返回此数组:

[ '2', index: 0, input: '28' ]
(我知道需要一个数组。但我希望得到
[“2”]

另外,我注意到运行全局匹配确实会返回预期的数组

var first = "28".match(/[0-9]/g);
console.log(first);
阅读.match()文档时,我没有在网上找到任何帮助。是什么导致全局标志对返回的数组进行如此大的更改?我假设这与我的环境有关,因为我遇到了这种情况(与JSBin等iframed repl站点相反)。

请参见:

如果正则表达式不包含
g
标志,则返回 结果与
RegExp.exec()
相同。返回的数组有一个额外的
输入
属性,其中包含已分析的原始字符串
。在里面 另外,它有一个
索引
属性,表示从零开始的 字符串中匹配项的索引

这就是为什么不使用
g
match
返回这么多元素的原因。现在:

如果正则表达式包含
g
标志,则该方法返回 包含所有匹配子字符串而非匹配对象的数组。 捕获的组不会返回。如果没有匹配项,则该方法 返回null


因此,您的第一个元素是与正则表达式匹配的第一个文本。

参见我想知道为什么提到MSDN而不是MDN/WS3,并且公认的答案指出很难找到好的文档。这真的很容易。如果你觉得更倾向于删除这个问题,请这样做。如果对你有用的话,请给我其他的。如果您需要更多帮助,请告诉我。谢谢,特别是关于RegExp.exec()具有相同功能的提示。快速提问:返回这个额外的索引和输入属性信息是否不仅仅是因为我省略了“g”,还因为我使用了node?这仅仅是因为全局修饰符。