如何匹配...... "先于/后跟"正则表达式的东西?

时间:2016-09-19 11:52:03

标签: javascript regex google-sheets

我正在使用Google表格文档,其中我需要操纵字符串并提取它们的某些部分。这些字符串与字符具有以下形式:

广告名称:FOO_FOOBAR_DE_CH_Zagreb + N1_970x250.zip; 970x250的

我需要提取两个"字段":

  • 萨格勒布
  • 970x250的

显然,第一个总是被"\_""+"包围,这使得事情变得更容易,另一个被"_""."包围或者先于如果我要从字符串的末尾捕获它,请"; "

我正在尝试使用Google表格专有REGEXMATCH公式(read more about it here),但我必须做错事。如果重要,Google产品会使用 RE2 RegEx" flavor"。

这是我到目前为止所做的:

=REGEXEXTRACT(text, "(?:_)[A-Za-z]+(?:\+).*")

这个回归:

  

_Zagreb +

所以我需要失去" _"和" +"。我明白,对于这种类型的操作(在某些字符之间提取文本),应该使用环视,但我仍然不熟悉这些。此外,据我所知,其中一些(最值得注意的是负面观察)不适用于JavaScript。

这是尝试2:

=REGEXEXTRACT(text, ".*[A-Za-z]+(?=\+.*)")

这个只会引发#REF错误。我发现这两个资源对于学习RegEx非常宝贵:

但由于时间不够,我现在无法详细研究这个问题。

1 个答案:

答案 0 :(得分:2)

在Google Speadsheets中,您可以在需要从特定上下文中提取的文本周围使用捕获组。因此,只需将()放在这些模式部分周围。

要获取Zagreb,请使用=REGEXEXTRACT(F15,"_([a-zA-Z]+)\+")并获取解决方案,请使用=REGEXEXTRACT(F15,";\s*([0-9x]+)$")

模式1

  • _ - 刚刚匹配的下划线
  • ([a-zA-Z]+) - 捕获与一个或多个ASCII字母匹配的组1
  • \+ - 文字+

模式2

  • ;\s* - ;和0+空格
  • ([0-9x]+) - 捕获与一个或多个数字匹配的组1或x
  • $ - 在单元格内容的末尾。

在这两种情况下,您只能获取捕获到第1组的子字符串。

enter image description here

有关capturing groups can be found here的更多信息。