2016-05-04 4 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
  • и если результат среза совпадает с 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', это позволит избежать ошибок с нежелательными пробелами или разрывами строк. –

Смежные вопросы