REGEXEXTRACT 与捕获组

fri*_*man 8 regex google-sheets

我想知道REGEXEXTRACT()在 Google Sheets 中使用时是否有办法引用以相同表达式捕获的组?

假设我们有一个示例字符串: aaa123bbb123ccc456ddd123eee123fff456ggg

我们想提取一些 3 位数字至少出现 3 次的部分。通常我会像这样使用正则表达式: (\d{3})(?:[^\1]*\1){2,}

但是如何引用中的第一组 =REGEXEXTRACT(A1;"(\d{3})(?:[^\1]*\1){2,}")?这个在表格中返回错误。

Wik*_*żew 7

RE2 模式中没有反向引用支持,您需要编写一个自定义 JS 函数来获取您需要的内容:

function IS_THREE_DIGIT_REPEATING(input) {
  var rx = /(\d{3})(.*\1){2}/;
  var res = rx.exec(input);
  return res ? res[1] : "No";
}
Run Code Online (Sandbox Code Playgroud)

它将打印单元格中第一个捕获组的内容(重复的 3 位数字),或者No如果没有匹配项。

在此处输入图片说明

图案详情

  • (\d{3}) - 捕获组 1:三位数字
  • (.*\1){2} - 除换行符以外的任何 0+ 字符连续出现 2 次,其后跟在组 1 中捕获的值相同。