2016-05-04 91 views
1

我知道有一個contains關鍵字,所以我可以使用:如何檢查字符串是否以Liquid中的子字符串結尾?

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

但我怎麼能檢查是否字符串的endsWith子?

我已經盡力,但我不會工作:

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

您是否閱讀過String文檔? –

回答

2

作爲一種變通方法,你可以使用string slice方法

  • 與爲startIndex: some_string length - sub_string length
  • stringLength: sub_string size
  • 和如果slice的結果與sub_string相同 - > 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縮短它的工作原理反正因爲切片結果將是空的,以及

+0

爲什麼你使用'capture'而不是'assign'? –

+0

我不確定。 [這裏](https://github.com/Shopify/liquid/issues/487)它表示,在某些情況下,捕獲速度可能會更快。我認爲'capture'對於some_string和sub_string定義是有意義的,因爲它可以是其他東西構造的東西。也許對於其他人來說,分配會更清晰。你怎麼看? – michaPau

+0

在你的情況下,沒有'append',就像'{%assign foobar =「foo」| append:bar%}',分配速度快20%。從我的角度來看,當您可以使用'assign'時,這可以避免出現無用空間或換行符的錯誤。 –

相關問題