如何使用正则表达式将 select 引号内的液体标记,但不一定 following/followed 引号

How do I use a regular expression to select liquid tags within quotation marks, but not necessarily following/followed by quotation marks

我想要 select 以下所有液体标签:

{%-

-%}

当它们出现在引号内但不一定紧跟在引号之后或后面紧跟引号时。

尝试了几次,认为我越来越接近:(?<=")({%-)(?=")

刚接触正则表达式 - 感谢您的帮助。

我正在尝试做的事情的例子:

{%- assign foo = true -%}

<span class="{%- if foo == true -%} blue{%- else -%} red{%- endif -%}">item</span>

然后使用正则表达式替换 {%- 和 -%} 仅当 within/next 到 ":

{%- assign foo = true -%}   (no replacement)

<span class="{% if foo == true %} blue{% else %} red{% endif %}">item</span>  (replaced)

非常感谢您的专业知识和帮助。

我猜您可能会尝试编写类似于以下内容的表达式:

(?=.*")-%|(?=.*")%-

并将其替换为%

Demo

(?=.*") 将至少检查行中的 ",您可以更改它。

花了一些时间,但这里有一个完美的正则表达式来解决您的问题:

查找:

((?<pad>\A[^"]*"[^"]*?|\G[^"{}]*|\G"[^"]*")(((?<start>\{%)-(?<content>[^"]*?)-(?<end>%\}))|(?<pad2>[^"{}%]*)))

替换:

${pad}${pad2}${start}${content}${end}

解释:

此正则表达式将从字符串的开头搜索引号 (")。找到一个后,它将搜索标签,并将它们分组保存(不带 - 符号),然后替换它们。它将继续这样做,直到找到另一个引用。

当它找到一个结束引号时,它将忽略所有内容,直到下一个起始引号,然后它再次启动该模式。

Try it online!