字符串替换FTL中的特定单词

时间:2018-05-03 07:32:41

标签: freemarker

我需要在FTL中替换URL中的特定字符串。

代码1:

<#assign pageUrlWithParams= "https://sample.com/category?filter=low&navParam=Appliances&skrLocale=en_US&t=1"/>
<#if pageUrlWithParams?? && pageUrlWithParams != '' && pageUrlWithParams?contains("skrLocale")>
    <#assign pageUrlWithParams = pageUrlWithParams?replace('skrLocale','')/>
</#if>
${pageUrlWithParams}

代码2:

 <#assign pageUrlWithParams= "https://sample.com/category?filter=low&navParam=Appliances&skrLocale=en_FR&t=2"/>
    <#if pageUrlWithParams?? && pageUrlWithParams != '' && pageUrlWithParams?contains("skrLocale")>
        <#assign pageUrlWithParams = pageUrlWithParams?replace('skrLocale','')/>
    </#if>
    ${pageUrlWithParams}

我需要删除&#34; skrLocale = en_US&#34;和&#34; skrLocale = en_FR&#34;来自pageUrlWithParams。

已知文字是&#34; skrLocale&#34;,使用此我需要删除&#34; skrLocale = en_US&#34;和&#34; skrLocale = en_FR&#34;。 由于en_US和en_FR,我不知道如何在等于之后采用那个部分。

有人建议给出答案。提前致谢

3 个答案:

答案 0 :(得分:1)

使用正则表达式('r'作为?replace的第三个参数)是关键。请注意,由于URL语法的复杂性,我们需要处理两个边缘情况(skrLocale是第一个参数,skrLocale是唯一参数),以下函数实现。但是,它不会在参数名称中处理%xx转义(您可能不关心):

<#function removeSkrLocale url>
  <#return url?replace(r'([&\?])skrLocale=[^&]*&?', '$1', 'r')?remove_ending('?')>
</#function>

${removeSkrLocale(pageUrlWithParams)}

当然,您也可以直接在#function内部${}执行此操作,但它可以重复使用,并且可以通过这种方式进行自我记录。

答案 1 :(得分:0)

我会使用Freemarker function(这是一个简单的版本,可以改进)

<#function remove_param_if_value_equals pageUrlWithParams paramName, paramValues >
    <#if pageUrlWithParams?has_content && pageUrlWithParams?contains(paramName)>
        <#list paramValues as paramValue>
            <#local paramNameAndValue = paramName + "=" + paramValue />
            <#local pageUrlWithParams = pageUrlWithParams?replace(paramNameAndValue,'')/>
        </#list>
    </#if>
    <#return pageUrlWithParams />
</#function> 


<#assign pageUrlWithParams= "https://sample.com/category?filter=low&navParam=Appliances&skrLocale=en_US&t=1"/>
<#assign pageUrlWithParams = remove_param_if_value_equals(pageUrlWithParams, "skrLocale", ["en_US", "en_FR"]) />
${pageUrlWithParams}

执行业务的代码仍然是孤立的,可以在以后更改/改进。

(例如,有可以清理的双“&amp;”

答案 2 :(得分:0)

我不知道FTL。但是,如果您需要在网址中替换参数 skrLocale ,我认为以下是您可以使用的好模式:

(skrLocale(.*?)&)

将(。*?)称为lazy,它从 skrLocale 匹配到最近的&amp; 。因此,根据您的情况,它将匹配 skrLocale = en_US&amp; skrLocale = en_FR&amp;