const str = 'I have 12 apples and 5 oranges';
const regex = /(\d+)/g;
let match;
while (match = regex.exec(str)) {
console.log(match[1]);
}
捕获组工作原理解释
- 正则表达式
/(\d+)/g
:
\d
是一个元字符,表示匹配任意一个数字字符(0 - 9)。
+
是一个量词,表示前面的字符(这里是 \d
,即数字字符)出现一次或多次。所以 \d+
整体表示匹配一个或多个连续的数字字符。
()
用于定义捕获组。在这个正则表达式中,(\d+)
就是一个捕获组,它会捕获满足 \d+
规则的字符串部分。
g
是全局匹配标志,表示在整个字符串中查找所有匹配项,而不是找到第一个匹配项就停止。
regex.exec(str)
:
exec
方法在字符串 str
中执行查找匹配项的操作。每次调用 exec
方法时,它会返回一个数组。
- 数组的第一个元素
match[0]
是整个匹配到的字符串(包括捕获组内的内容)。
- 数组的第二个元素
match[1]
是第一个捕获组捕获到的内容,也就是我们想要的数字部分。如果正则表达式中有多个捕获组,match[2]
、match[3]
等依次对应其他捕获组捕获到的内容。
while (match = regex.exec(str))
:
- 这个循环会不断执行,直到
regex.exec(str)
找不到新的匹配项(返回 null
)。每次循环,match
会被赋值为当前找到的匹配数组,然后我们通过 match[1]
提取出捕获组捕获到的数字并打印出来。