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

JavaScript如何删除字符串指定子串,无需依赖数字索引截取?

问题解决方案

你不需要强行使用substr()实现需求,这个方法的设计逻辑就是基于索引位置截取内容,本身就不匹配「按指定内容删除子串」的场景,硬用反而要额外写逻辑计算子串位置,还会带来必须固定字符串长度的问题,直接用JS原生提供的字符串处理API就能实现你要的效果,不需要限制文件名长度。

通用指定子串删除实现

两种写法都能实现「传入目标字符串和要删除的子串,直接返回处理后结果」的效果,不需要传位置索引:

// 写法1:split+join 兼容性最好,所有浏览器环境都支持
function deleteSubStr(target, wordsToDelete) {
  return target.split(wordsToDelete).join('');
}

// 写法2:replaceAll 写法更简洁,现代浏览器、Node.js 15+版本原生支持
function deleteSubStr(target, wordsToDelete) {
  return target.replaceAll(wordsToDelete, '');
}

对应你给出的逻辑示例,用法如下:

const input_value = "hello,world";
const new_input_value = deleteSubStr(input_value, ",world");
// 处理后new_input_value的值为"hello",符合预期

修正后的文件校验代码

你原来写的代码存在关键字大小写错误、引号用了中文全角符号、后缀判断逻辑不准确、初始取值时机不对的问题,修正后完整可运行代码如下:

<input id="extension" type="file">
<script>
// 监听文件选择动作,用户选完文件再读取值
document.getElementById('extension').addEventListener('change', function() {
  const fileName = this.value;
  const targetExt = '.atkp';
  // 用endsWith判断后缀,避免文件名中间包含后缀字符串导致的误判
  if (fileName.endsWith(targetExt)) {
    // 符合后缀要求的处理逻辑写在这里
    const nameWithoutExt = deleteSubStr(fileName, targetExt);
    console.log('移除后缀后的文件名:', nameWithoutExt);
  } else {
    alert(`this file can't be accessed since it doesn't have the extention '${targetExt}'.`)
  }
})

function deleteSubStr(target, wordsToDelete) {
  return target.split(wordsToDelete).join('');
}
</script>

注意:判断文件后缀不要用includes(),如果出现类似test.atkp.txt的文件名,includes()会误判为符合要求,用endsWith()直接校验字符串结尾的内容,判断结果更准确。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:00:53