关于jexl.eval中toLowerCase()和replace()方法的使用问题咨询
问题分析与解决
核心原因
JEXL 默认不支持直接调用原生 JavaScript 字符串方法(比如 toLowerCase()、replace()),你直接在表达式里使用这些方法不符合JEXL的语法规范,这就是返回空字符串的根本原因。
JEXL 的设计逻辑是通过自定义 Transform(管道符 | 语法)来实现数据转换,而非直接调用原生对象方法。你提供的 playground 示例也验证了这一点——里面就是通过注册 lower、replace 两个自定义 Transform 来实现字符串处理的。
修正方案
1. 注册必要的 Transform
首先需要给 JEXL 实例注册对应的转换函数:
const jexl = require('jexl'); // 注册小写转换 jexl.addTransform('lower', (val) => val.toLowerCase()); // 注册替换转换(支持全局替换) jexl.addTransform('replace', (val, search, replacement) => { return val.replace(new RegExp(search, 'g'), replacement); });
2. 修正表达式语法
改用 JEXL 支持的管道符语法调用 Transform:
jexl.eval("dataset[0].data['Entity Name'] | lower | replace(' ', '_')", data);
额外说明
如果你坚持要直接使用原生字符串方法,理论上可以通过扩展 JEXL 的 String 原型来实现,但这种方式不符合 JEXL 的设计理念,可能带来兼容性问题,不推荐使用。
内容的提问来源于stack exchange,提问作者user22734805
相关产品推荐
相关产品推荐

