我有一个Freemarker变量,可以包含如下字符串:
myFirstStringExample
mySecondStringExample
myABCStringExample
myExample
我需要删除最终的'示例'这将是任何可能的字符串。 我想最终得到以下字符串:
My First String
My Second String
My ABC String
My
有一种简单的方法吗?
答案 0 :(得分:2)
这是一个算法问题,而不是FreeMarker问题,但是你走了:
<#function camelCaseToCapWordsButLast(s)>
<#return s
<#-- "fooBar" to "foo bar": -->
?replace('([a-z])([A-Z])', '$1 $2', 'r')
<#-- "FOOBar" to "FOO Bar": -->
?replace('([A-Z])([A-Z][a-z])', '$1 $2', 'r')
<#-- and the easy part: -->
?cap_first?keep_before_last(' ')
>
</#function>
${camelCaseToCapWordsButLast('myFirstStringExample')}
${camelCaseToCapWordsButLast('mySecondStringExample')}
${camelCaseToCapWordsButLast('myABCStringExample')}
${camelCaseToCapWordsButLast('myExample')}
答案 1 :(得分:0)
我设法得到了这样的东西:
<#assign test="myFirstStringExample" />
<#assign first=test?matches("([a-z]+).*")?groups[1]?cap_first />
<#assign words=test?matches("([A-Z][a-z]*)") />
${first} <#list words as word><#if word?has_next>${word} </#if></#list>
它不仅适用于myABCStringExample