Liquid中使用{% capture %}实现单词首字母大写,仅保留'And'小写的问题
解决Liquid中首字母大写时保留"And"小写的问题
问题根源
你之前用replace: ' And '没生效,大概率是{% capture %}捕获的内容里,单词之间的空格不是单个(循环缩进或换行导致多空格),导致匹配不到目标字符串。
方法一:循环时直接处理(推荐)
在遍历单词的阶段就判断处理,避免后续空格问题,代码更可靠:
{% assign words = contact.data.firstname | replace: '-', ' ' | split: ' ' %} {% capture f_name %} {% for word in words %} {% assign capitalized_word = word | capitalize %} {% if capitalized_word == "And" %} and {% else %} {{ capitalized_word }} {% endif %} {% unless forloop.last %} {% endunless %} {% endfor %} {% endcapture %} {{ f_name }}
这段代码会把每个单词转成首字母大写,遇到转后为"And"的单词时,直接输出小写的"and",同时通过{% unless forloop.last %}控制单词间只保留一个空格,输出格式更整洁。
方法二:修复空格后再替换
如果想保留原来的捕获逻辑,先清理多余空格再替换:
{% assign words = contact.data.firstname | replace: '-', ' ' %} {% assign words = words | split: ' ' %} {% capture f_name %} {% for word in words %} {{ word | capitalize }} {% endfor %}{% endcapture %} {{ f_name | strip_newlines | replace: ' ', ' ' | replace: ' And ', ' and ' }}
先用strip_newlines去掉捕获内容里的换行,再把多空格替换成单个空格,最后就能匹配到"And"并替换为小写。
内容的提问来源于stack exchange,提问作者Shantelle
相关产品推荐
相关产品推荐

