从斜杠分隔字符串提取函数名并替换为函数返回值的实现
替换斜杠分隔字符串中的函数调用为返回值
需求说明
给定斜杠分隔的字符串,其中包含形如getCustomer()的函数调用(部分带前缀如customer=getCustomer()),需将这些函数调用替换为对应函数的返回值,最终得到目标字符串。
已定义的工具函数:
function getCustomer() { return "Customer1"; } function getControllerName() { return "myController"; } function getCsvFileName() { return "userData.csv"; }
解决方案代码
// 构建函数映射表,安全管理可调用函数 const functionMap = { getCustomer, getControllerName, getCsvFileName }; // 原始输入字符串 const originalStr = "my_doc/desktop/customer=getCustomer()/getCsvFileName()/controller=getControllerName()"; // 处理字符串并替换函数调用 const finalStr = originalStr.split("/") .map(part => { if (part.endsWith("()")) { // 提取函数调用片段 const funcCall = part.split("=")[1] ?? part; // 提取纯函数名(移除末尾的"()") const funcName = funcCall.slice(0, -2); if (functionMap[funcName]) { const funcResult = functionMap[funcName](); // 根据是否有前缀,替换对应部分 return part.includes("=") ? part.replace(funcCall, funcResult) : funcResult; } } // 非函数调用部分直接保留 return part; }) .join("/"); console.log(finalStr); // 输出结果:my_doc/desktop/customer=Customer1/userData.csv/controller=myController
思路解析
- 安全函数调用:用
functionMap集中管理可调用函数,避免直接使用全局变量或eval带来的安全风险。 - 逐段处理:将原始字符串按斜杠分割后,逐个检查每个片段是否为函数调用(以
()结尾)。 - 函数提取与替换:
- 从片段中提取函数调用部分(区分带前缀和不带前缀的情况)。
- 移除
()得到纯函数名,通过映射表调用对应函数获取返回值。 - 根据原片段是否包含前缀(
=),替换对应的函数调用部分,或直接替换为返回值。
- 拼接结果:将处理后的所有片段用斜杠拼接,得到最终目标字符串。
内容的提问来源于stack exchange,提问作者Garry S
相关产品推荐
相关产品推荐

