CodeQL 文档

反向引用在捕获组之前

ID: js/regex/back-reference-before-group
Kind: problem
Security severity: 
Severity: error
Precision: very-high
Tags:
   - reliability
   - correctness
   - regular-expressions
Query suites:
   - javascript-security-and-quality.qls

点击查看 CodeQL 仓库中的查询

反向引用可用于引用先前匹配的捕获组的结果。在语法上,引用尚未完成匹配的捕获组是合法的,但此类反向引用始终匹配空字符串,没有太大用处。

建议

如果反向引用没有用,请将其删除,或者将其更新为引用正确的捕获组。

示例

在以下示例中,反向引用 \2 出现在它引用的捕获组 (.*) 之前。(请注意,第一个组是非捕获组。)

if (/(?:start|end)(\[*|\{*)abc\2:(.*)/.test(input))
	console.log("Found the pattern.");

如果正则表达式更新不一致,可能会出现这种正向引用。例如,在该示例中,第一个组最初可能是捕获组,因此反向引用引用了组 (\[*|\{*])。但是,现在此组是第一个捕获组,因此应将反向引用更新为 \1

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私