如何使用正则表达式将 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}
解释:
此正则表达式将从字符串的开头搜索引号 ("
)。找到一个后,它将搜索标签,并将它们分组保存(不带 -
符号),然后替换它们。它将继续这样做,直到找到另一个引用。
当它找到一个结束引号时,它将忽略所有内容,直到下一个起始引号,然后它再次启动该模式。
我想要 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}
解释:
此正则表达式将从字符串的开头搜索引号 ("
)。找到一个后,它将搜索标签,并将它们分组保存(不带 -
符号),然后替换它们。它将继续这样做,直到找到另一个引用。
当它找到一个结束引号时,它将忽略所有内容,直到下一个起始引号,然后它再次启动该模式。