You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shopify Liquid中检测字符串是否以指定子串结尾?

在Shopify Liquid中判断字符串是否以指定子串结尾的优化方案

我需要在Shopify Liquid里判断一个字符串是否以某个特定子串结尾,以下是我试过的几种方法:

内置方法

Shopify Liquid没有ends_with这类字符串过滤器。

正则表达式

Liquid也不支持正则匹配功能。

从末尾截断后比较

很多语言支持自定义从字符串末尾截断内容,但Liquid只支持截断空格,此方法不可行。

按子串分割后检查结果

我试过用assign tmp = str | split: substr后检查结果,原以为如果最后一项是空字符串就能判断,但比如用X分割..X..和..X..X得到的结果都是["..", ".."],这个思路无效。

删除最后匹配的子串后追加再比较

这个方法可行,但代码不够简洁:

{% liquid
  assign tmp = str | remove_last: substr | append: substr
  if tmp == str
    assign output = true
  else
    assign output = false
  endif
%}

截取字符串末尾部分与子串比较

此方法也可行,但因为Liquid不支持括号,代码反而更长:

{% liquid
  assign tmp_neg_substr_size = 0 | minus: substr.size
  assign tmp_ending = str | slice: tmp_neg_substr_size, substr.size
  if tmp_ending == substr
    assign output = true
  else
    assign output = false
  endif
%}

有没有更优的解决方案?或者能不能把现有方案简化成一行代码?

简化方案

针对现有的可行方案,确实可以简化成更紧凑的代码:

基于remove_last的一行简化

直接通过条件判断赋值,无需多行liquid块:

{% assign output = (str | remove_last: substr | append: substr) == str %}

基于slice的简化

可以把临时变量和判断整合,更紧凑:

{% assign neg_len = 0 | minus: substr.size %}
{% assign output = (str | slice: neg_len, substr.size) == substr %}

如果追求极致一行(可读性稍弱):

{% assign output = (str | slice: 0 | minus: substr.size, substr.size) == substr %}

边界情况处理:如果需要兼容子串为空的场景(此时通常应返回true),可以补充判断:

{% assign output = substr == "" ? true : (str | remove_last: substr | append: substr) == str %}

内容的提问来源于stack exchange,提问作者tremby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:57:17