Apache Velocity模板删除字符串最后一个字符不生效如何解决
问题原因
Marketo 内置的 Apache Velocity 解析器不支持在方法参数中直接进行算术运算,你在substring的参数里直接写$refArr[1].length()-1时,Velocity 会把-1识别为无效的语法片段,因此抛出不识别-1的报错。
解决方案1:调整原拆分逻辑
先把需要计算的结束索引单独赋值给变量,再传入substring方法即可正常运行:
#set( $refArr = $reference.split(']',2) ) #set( $urlPart = $refArr[1] ) ## 单独计算结束索引,不要直接写在substring参数里 #set( $urlEndIndex = $urlPart.length() - 1 ) <li> <a href="$urlPart.substring(1, $urlEndIndex)">$refArr[0].substring(1)</a> </li>
注意上述代码给href属性补充了双引号,可避免URL包含特殊字符时出现HTML解析错误。
解决方案2:正则全局替换方案
如果需要批量处理多个Markdown链接,可以直接使用Velocity的正则替换方法,Marketo环境中正则的括号不需要额外转义,正确写法如下:
## 匹配所有[文本](链接)格式的Markdown链接,替换为HTML a标签 #set( $processedContent = $reference.replaceAll('\[([^\]]+)\]\(([^)]+)\)', '<a href="$2">$1</a>') )
该正则的匹配逻辑为:
\[([^\]]+)\]匹配方括号包裹的链接文本,捕获分组1为链接文本内容\(([^)]+)\)匹配括号包裹的URL,捕获分组2为链接地址
内容的提问来源于stack exchange,提问作者Drew Hibbard
相关产品推荐
相关产品推荐

