带有匹配功能的Javascript正则表达式的困惑

时间:2018-09-10 03:58:11

标签: javascript regex

为什么数组中的第三个元素只是“ .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' ]

2 个答案:

答案 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)*