代码之家  ›  专栏  ›  技术社区  ›  sigur7

将regexreplace和concat合并到Google工作表中的同一公式中

  •  -1
  • sigur7  · 技术社区  · 8 年前

    我有两个公式需要合并成一个。但我得到一个计算错误:“ if的参数数目错误。预期在2到3个参数之间,但收到4个参数。

    这是第一个公式

    =REGEXREPLACE(A4, "(/[^/]+)(?:/\?[^/]*)?$", "$1/")
    

    这是第二个公式

    =ARRAYFORMULA(IF(ISBLANK(B2:B),"",(CONCAT(B2:B,"?tag=ukos-20"))))
    

    这是我的尝试

    =ARRAYFORMULA(IF(ISBLANK(B2:B),"",(REGEXREPLACE(B2:B, "(/[^/]+)(?:/\?[^/]*)?$", "$1/")),(CONCAT(B2:B,"?tag=ukos-20"))))
    

    以下是 an example in a Google Sheet ,如果需要,可以使用 File-> Make a Copy .

    所以我们对行执行regex,然后将结果传递给concat,concat将标记附加到url。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Wiktor Stribiżew    8 年前

    在这里,你要支持两个 ?key=value ref=value 结束类型,因此您当前的regex将无济于事。

    你可以用

    =ARRAYFORMULA(IF(ISBLANK(B2:B),"",CONCAT(REGEXREPLACE(B2:B, "(/[^/]+)(?:/(?:\?|ref=)[^/]*)?$", "$1/"),"?tag=ukos-20")))
    

    注意,这将删除查询字符串和 reg=... 在URL的末尾添加字符串并附加硬编码的。

    正则表达式匹配

    • (/[^/]+) / 然后1+个字符,除了 / 并将结果放入第1组
    • (?:/(?:\?|ref=)[^/]*)? -可选组(匹配1或0次)匹配:
      • / -A /
      • (?:\?|ref=) -或者 ? ref=
      • [^/]* -0+个字符,而不是 /
    • $ -字符串结尾。

    这个 $1/ 将替换为组1的内容并附加 / .