为什么 match 将整个字符串作为数组中的第一个元素返回?

Why is match returning the whole string as the first element in the array?

假设我有这个字符串:

'1234*321*123'

我想将每组数字作为数组中的一个元素。

所以我用了这个:

'1234*321*123'.match(/^(\d{4})\*(\d{3})\*(\d{3})$/);

但那是 returning ["1234*321*123", "1234", "321", "123"],而我期待 ["1234", "321", "123"]

为什么,如果只有数字组包含在捕获组中,match return 整个字符串是否作为数组的第一个元素?

当您使用()进行匹配时,它会同时给出特定的组件和完整的字符串。对于您想要的结果,请使用:

'1234*321*123'.match(/\d+/g);

第零个元素总是完全匹配。第一个元素是第一个捕获,第二个元素是第二个捕获,等等。如果你只想要所有捕获而不是完全匹配,你可以使用 result.slice(1).

如果你问的是"Why is the first element the full match?":

  • 这就是 match 的工作方式。
  • 它类似于 [=12=]</code>、<code>... 在旧语言中。