TypeScript如何从任意格式字符串中提取test/后的首个单词
问题原因
你现有代码的bug出在边界判断上:当test/目标词位于字符串末尾、后方没有空格时,substring(start).indexOf(' ')会返回-1,计算出的end位置无效,最终截取结果错误。
优化方案
方案1:修正原字符串截取逻辑
只需要补全「后方无空格」的分支判断即可,同时补充字符串中不存在test/前缀的异常处理:
const prefix = 'test/'; const start = text.indexOf(prefix); let result = ''; if (start !== -1) { // 截取前缀之后的所有内容 const afterPrefix = text.slice(start + prefix.length); // 查找第一个空格位置 const spacePos = afterPrefix.indexOf(' '); // 无空格则取到字符串末尾,有空格则取到空格前 result = spacePos === -1 ? afterPrefix : afterPrefix.slice(0, spacePos); }
该逻辑可以覆盖所有场景:
- 输入纯
test/xxx格式、前后无其他内容时,正确返回xxx - 输入嵌入完整句子的
test/xxx时,正确返回空格前的xxx - 输入内容不存在
test/前缀时,返回空字符串避免运行报错
方案2:正则匹配(更简洁)
直接用正则捕获test/后到第一个空白字符/字符串末尾的连续非空内容,代码更短,适配性更强:
const match = text.match(/test\/(\S+)/); const result = match ? match[1] : '';
正则中\S+代表匹配1个及以上连续非空白字符,天然适配「后面是空格」「后面是字符串结尾」两种场景,不需要额外写分支判断。
内容的提问来源于stack exchange,提问作者user17365408
相关产品推荐
相关产品推荐

