为什么数组中的第三个元素只是“ .1”而不是“ 4.5.1”?我认为\d+
对应于'3',而(\.\d)*
将捕获其余的小数和数字。
var re = /see (chapter \d+(\.\d)*)/i;
var str = 'For more information on regular expressions, see Chapter 3.4.5.1 and CHAPTER 2.3';
console.log(str.match(re));
输出:
[ 'see Chapter 3.4.5.1',
'Chapter 3.4.5.1',
'.1',
index: 45,
input: 'For more information on regular expressions, see Chapter 3.4.5.1 and CHAPTER 2.3' ]
答案 0 :(得分:2)
重复捕获组将仅捕获其最后重复。如果要捕获所有 个数字和句点,则应在该组中的 内重复:
var re = /see (chapter \d+((?:\.\d)*))/i;
var str = 'For more information on regular expressions, see Chapter 3.4.5.1 and CHAPTER 2.3';
console.log(str.match(re));
如果您将原始代码插入regex101中,则会看到警告描述:
https://regex101.com/r/uDTcTC/1
重复捕获组将仅捕获最后一次迭代。在重复的组周围放置一个捕获组以捕获所有迭代,或者如果您对数据不感兴趣,则使用非捕获组
答案 1 :(得分:0)
array[0] is a full match
array[1] is a group match caused by a wider parenthesis (chapter \d+(\.\d)*)
array[2] is a group match caused by the narrow parenthesis (\.\d)*