为什么这个RegExp匹配两个字符串?

El *_*oco 1 javascript regex

var str = "abcd1234";
var first = str.match(/^abcd(\d+)$/)[0]; //matches abcd1234
var number = str.match(/^abcd(\d+)$/)[1]; //matches 1234 only
Run Code Online (Sandbox Code Playgroud)

为什么这个正则表达式首先与整个str匹配,然后匹配数字部分?看着它我会说它总是必须匹配abcd然后一个或多个数字?"abcd"不是比赛的强制性部分吗?

顺便说一句,我发现这个正则表达式是这个问题的一部分.

谢谢.

Ant*_*sse 6

这是因为0表示整个匹配,而1表示第一个括号组(实际上是1234)

你可以这样做:

var str = "abcd1234";
var first = str.match(/^(abcd)(\d+)$/)[0]; //returns abcd1234
var chars = str.match(/^(abcd)(\d+)$/)[1]; //returns abcd only
var number = str.match(/^(abcd)(\d+)$/)[2]; //returns 1234 only
Run Code Online (Sandbox Code Playgroud)