You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSTL函数嵌套失效,如何从指定字符串中获取@前的目标子串?

解决JSTL函数嵌套获取子串的问题

嘿,这个问题我之前也踩过坑!问题出在你嵌套JSTL函数的时候重复使用了${}表达式标记——JSTL函数的嵌套只需要一层${}包裹整个逻辑就行,内部的函数调用完全不需要再套${},否则EL解析器会报错或者无法正确识别。

正确的嵌套写法

直接把两个JSTL函数放在同一个${}里,内部函数作为外层函数的参数传递:

${fn:substringBefore(fn:substringAfter("Promote by abc@gmail.com", "by "), "@")}

这个表达式会先执行substringAfter得到abc@gmail.com,再把这个结果传给substringBefore,最终就能得到你想要的abc啦。

额外注意事项

别忘了在JSP页面的顶部导入JSTL函数标签库,否则所有fn:开头的函数都无法生效:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

替代方案(EL 3.0+)

如果你的Web容器支持Java EE 7及以上(对应EL 3.0版本),可以不用JSTL函数,直接用EL原生的字符串操作,写法更简洁:

方法1:split分割

${"Promote by abc@gmail.com".split("by ")[1].split("@")[0]}

方法2:indexOf + substring

${"Promote by abc@gmail.com".substring(
    "Promote by abc@gmail.com".indexOf("by ") + 3, 
    "Promote by abc@gmail.com".indexOf("@")
)}

内容的提问来源于stack exchange,提问作者Bhavik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:41:57