如何检查字符串是否以Liquid中的子字符串结尾?

时间:2016-05-04 08:33:00

标签: ruby jekyll liquid

我知道有一个contains关键字,所以我可以使用:

{% if some_string contains sub_string %}
    <!-- do_something -->
{% ... %}

但是如何检查字符串是否以子字符串结尾?

我试过这个,但我不会工作:

{% if some_string.endswith? sub_string %}
    <!-- do_something -->
{% ... %}

4 个答案:

答案 0 :(得分:2)

作为一种解决方法,您可以使用string slice方法

  • with startIndex: some_string length - sub_string length
  • stringLength: sub_string size
  • 并且如果切片的结果与sub_string相同 - &gt; sub_string位于some_string的末尾。

它在液体模板中有点笨拙,但它看起来像:

{% capture sub_string %}{{'subString'}}{% endcapture %}
{% capture some_string %}{{'some string with subString'}}{% endcapture %}

{% assign sub_string_size = sub_string | size %}
{% assign some_string_size = some_string | size %}
{% assign start_index = some_string_size | minus: sub_string_size %}
{% assign result = some_string | slice: start_index, sub_string_size %}

{% if result == sub_string %}
    Found string at the end
{% else %}
    Not found
{% endif %}

如果some_string为空或比sub_string短,那么无论如何它都会起作用,因为切片结果也是空的

答案 1 :(得分:1)

我们可以使用带有split过滤器的另一种解决方案。

{%- assign filename = 'main.js' -%}
{%- assign check = filename | split:'js' -%}

{% if check.size == 1 and checkArray[0] != filename %}
   Found 'js' at the end
{% else %}
   Not found 'js' at the end
{% endif %}

我们在这里^^。

答案 2 :(得分:0)

与Jekyll一起,我最终写了一个小的模块包装器,添加了一个过滤器:

module Jekyll
   module StringFilter
    def endswith(text, query)
      return text.end_with? query
    end
  end
end
  
Liquid::Template.register_filter(Jekyll::StringFilter)

我这样使用它:

{% assign is_directory = page.url | endswith: "/" %}

答案 3 :(得分:0)

通过@v20100v 扩展答案

最好在拆分后获取数组中的最后一项,因为字符串可能会多次出现分隔符。

例如,“test_jscript.min.js”

类似于以下内容:

{% assign check = filename | split:'.' | last %}

{% if check == "js" %}
    Is a JS file
{% else %}
    Is not a JS file
{% endif %}