非捕获组(Non-capturing Group)

2024-06-24 20:44:30 285
非捕获组用于分组但不捕获匹配结果,主要用于简化正则表达式结构而不保存匹配的子字符串。

语法

(?:...)

示例

(?:foo|bar)baz

匹配 foobaz 或 barbaz,但不捕获 foo 或 bar。

解释:

  • (?:foo|bar)baz 表示匹配 foo 或 bar 后跟 baz。
  • 由于使用了非捕获组,foo 和 bar 不会被捕获为单独的组。

应用场景

  • 用于结构复杂的正则表达式,以提高可读性和维护性。
  • 避免不必要的捕获,从而节省内存。

代码示例

Python

import re

pattern = r'(?:foo|bar)baz'
test_string = 'foobaz barbaz'
matches = re.findall(pattern, test_string)
print(matches)  # ['foobaz', 'barbaz']

JavaScript

const pattern = /(?:foo|bar)baz/g;
const testString = 'foobaz barbaz';
const matches = testString.match(pattern);
console.log(matches);  // ['foobaz', 'barbaz']