在 JavaScript 中,有多种方法可以截取字符串。以下是常用的字符串截取方法:
1. substring()
let str = "Hello World";
// 从索引2开始到结束
console.log(str.substring(2)); // "llo World"
// 从索引2到索引7(不包括7)
console.log(str.substring(2, 7)); // "llo W"
// 如果开始索引大于结束索引,会自动交换
console.log(str.substring(7, 2)); // "llo W"
// 负值会被当作0
console.log(str.substring(-3)); // "Hello World"
2. slice()
let str = "Hello World";
// 从索引2开始到结束
console.log(str.slice(2)); // "llo World"
// 从索引2到索引7(不包括7)
console.log(str.slice(2, 7)); // "llo W"
// 支持负数索引(从末尾开始计算)
console.log(str.slice(-5)); // "World"
console.log(str.slice(2, -3)); // "llo Wo"
// 开始索引大于结束索引返回空字符串
console.log(str.slice(7, 2)); // ""
3. substr() - ⚠️ 已废弃
let str = "Hello World";
// 从索引2开始,截取5个字符
console.log(str.substr(2, 5)); // "llo W"
// 只指定开始位置
console.log(str.substr(2)); // "llo World"
// 支持负数索引
console.log(str.substr(-5)); // "World"
4. split() + join()
let str = "Hello World";
// 分割成数组后取前5个字符再拼接
let result = str.split('').slice(0, 5).join('');
console.log(result); // "Hello"
5. 正则表达式 match()
let str = "Hello World";
// 匹配前5个字符
let result = str.match(/^.{5}/);
console.log(result[0]); // "Hello"
// 匹配从第6个字符开始的所有字符
let result2 = str.match(/(?<=.{6}).*/);
console.log(result2[0]); // "World"
实际应用示例
// 截取文件名(去掉扩展名)
let filename = "document.pdf";
let nameWithoutExt = filename.substring(0, filename.lastIndexOf('.'));
console.log(nameWithoutExt); // "document"
// 截取URL的域名部分
let url = "https://www.example.com/path";
let domain = url.substring(url.indexOf('//') + 2, url.indexOf('/', 8));
console.log(domain); // "www.example.com"
// 安全截取文本(防止超出范围)
function safeSubstring(str, start, length) {
start = Math.max(0, start);
length = Math.min(length, str.length - start);
return str.substring(start, start + length);
}
let text = "Hello";
console.log(safeSubstring(text, 2, 10)); // "llo"
方法对比总结
方法 | 参数 | 负值处理 | 返回值 | 是否推荐 |
| 开始和结束索引 | 负值转为0 | 截取字符串 | ✅ 推荐 |
| 开始和结束索引 | 支持负索引 | 截取字符串 | ✅ 推荐 |
| 开始位置和长度 | 支持负索引 | 截取字符串 | ❌ 已废弃 |
| 灵活 | 支持各种操作 | 截取字符串 | ⚠️ 复杂场景 |
推荐使用 substring()
和 slice()
,其中 slice()
在处理负索引时更加方便。