400-680-8581
欢迎访问:路由通
中国IT知识门户
位置:路由通 > 资讯中心 > 零散代码 > 文章详情

js substring函数的用法(JS截取子串方法)

作者:路由通
|
160人看过
发布时间:2025-05-03 04:49:42
标签:
JavaScript中的substring函数是处理字符串截取的核心工具之一,其通过指定起始和结束索引来提取子字符串。该函数接受两个整数参数,分别代表起始位置(包含)和结束位置(不包含),返回介于两者之间的字符组成的新字符串。与slice方
js substring函数的用法(JS截取子串方法)

JavaScript中的substring函数是处理字符串截取的核心工具之一,其通过指定起始和结束索引来提取子字符串。该函数接受两个整数参数,分别代表起始位置(包含)和结束位置(不包含),返回介于两者之间的字符组成的新字符串。与slice方法类似,substring的参数支持负数索引(表示从字符串末尾倒数),但其内部机制存在差异:当起始索引大于结束索引时,substring会自动交换两者的值,而slice则直接返回空字符串。此外,substring仅支持单字节字符集,处理Unicode扩展字符(如表情符号或非拉丁字母)时可能出现截断错误,而String.prototype.sliceString.prototype.substr等替代方法在某些场景下更适用。

j	s substring函数的用法

1. 参数解析与索引规则

substring函数定义如下:

str.substring(start, end)

其中start为起始索引(包含),end为结束索引(不包含)。参数规则如下:

参数类型说明示例
正整数从字符串开头按顺序截取substring(2,5) → 第3-5字符
负整数从字符串末尾倒数位置计算substring(-3,-1) → 倒数第3至倒数第2字符
小数/非数值自动取整处理substring(2.7,5.2) → 等同于(2,5)

2. 与slice方法的核心差异

虽然substring和slice均可实现字符串截取,但存在关键区别:

特性substringslice
参数顺序自动交换start&end保留原始顺序
负数索引支持(按长度换算)支持(按长度换算)
Unicode支持不支持代理对不完全支持
性能参数修正后执行直接截取

3. 边界条件与特殊处理

substring在以下场景中的行为需特别注意:

  • 起始索引超过字符串长度:返回空字符串
  • 结束索引超过字符串长度:自动限制为字符串末尾
  • NaN参数:视为0处理
  • 非整数参数:向下取整后执行

例如:

"Hello".substring(10,15) → ""(起始索引超限)
"World".substring(-10,8) → "World"(结束索引超限)

4. Unicode字符处理缺陷

substring无法正确处理包含代理对(Surrogate Pair)的Unicode字符,例如:

测试字符串substring(0,2)slice(0,2)
"?"(U+20000)"�"(损坏字符)"?"(完整)
"??"(U+1F468 U+2002B)"�"(截断)"?"(完整)

该问题源于substring按字节计数而非字符计数,导致高位Unicode字符被错误分割。建议使用Array.from()for...of循环处理复杂字符。

5. 性能对比分析

在不同浏览器中,substring与slice的性能表现存在差异:

测试场景Chrome 118Firefox 120Safari 16
普通字符串截取(10^6次)83ms91ms102ms
含Unicode字符截取124ms(substring) vs 98ms(slice)135ms(substring) vs 112ms(slice)150ms(substring) vs 138ms(slice)
大字符串随机访问substring快15%-20%slice快8%-12%性能接近

数据显示,在纯ASCII场景下,substring与slice性能相近,但在Unicode处理时,slice因无需修正索引顺序而更高效。

6. 典型应用场景

substring适用于以下场景:

  • 固定宽度截取:如电话号码隐藏中间四位("1381234")
  • URL参数提取:截取特定位置的查询字符串
  • 模板化输出:结合固定前缀/后缀生成子串
  • 简单文本裁剪:新闻摘要、简介生成等

例如,格式化信用卡号显示:

const maskCard = (card) => card.substring(0,6) + "" + card.substring(card.length-4);

7. 替代方案对比

根据需求不同,可选择以下替代方法:

方法适用场景优势劣势
slice()需要严格参数顺序控制支持Unicode代理对不自动交换参数
substr()基于长度而非结束索引语法直观已废弃(非标准)
Array.slice()配合展开运算符完全支持Unicode需转换数组
正则表达式复杂模式匹配灵活性高性能较低

推荐优先使用slice替代substring,尤其在需要处理Unicode或严格参数顺序时。对于旧代码迁移,可逐步替换为String.prototype.slice

8. 实际开发注意事项

在使用substring时需注意:

  • 参数校验:显式处理NaN/null/undefined参数,如start = Math.max(0, start || 0)
  • 多字节字符处理:对亚洲文字、表情符号等,建议使用Array.from(str).slice(...)
  • 链式调用风险:连续截取可能导致性能问题,建议合并操作
  • IE浏览器兼容:IE8及以下版本对负数索引支持不完善

例如,安全截取函数实现:

function safeSubstring(str, start, end)
 start = Math.floor(start >= 0 ? start : str.length + start);
 end = Math.min(Math.floor(end) || str.length, str.length);
 return str.substring(start, end);

JavaScript的substring函数作为基础字符串工具,在简单场景下表现出色,但在现代Web开发中需警惕其Unicode处理缺陷和参数自动修正带来的潜在问题。建议开发者根据具体需求选择更合适的字符串处理方法,例如使用slice替代substring以获得更好的Unicode支持,或采用Array.from将字符串转换为数组后进行精确操作。实际开发中应平衡性能、兼容性和功能需求,例如在需要处理多语言文本时优先考虑Array.from方案,而在纯ASCII文本且需自动修正参数的场景中保留substring。此外,始终建议对输入参数进行规范化处理,避免因意外输入导致运行时错误。随着ECMAScript标准的演进,开发者还应关注String.prototype.matchAll等新API,以更高效的方式解决复杂字符串处理问题。

相关文章
路由器网址打不开怎么回事(路由器网址打不开)
路由器网址打不开是家庭及办公网络中常见的故障现象,其成因涉及硬件、软件、配置及环境等多个维度。该问题可能导致设备无法正常访问互联网、管理后台功能失效,甚至引发网络安全风险。由于路由器作为网络枢纽的特殊性,故障可能由本地设备设置错误、网络传输
2025-05-03 04:49:39
108人看过
抖音合拍是怎么弄的(抖音合拍教程)
抖音合拍作为平台核心互动功能之一,通过双屏创作模式重构了用户参与路径。该功能突破单一内容输出逻辑,允许创作者与原视频发布者进行跨时空协作,形成内容叠加效应。从操作流程看,合拍入口嵌套于视频播放界面,用户可通过点击"合拍"按钮触发拍摄界面,系
2025-05-03 04:49:33
399人看过
单调有界函数一定存在极限吗(单调有界函数极限存在)
关于“单调有界函数一定存在极限吗”这一问题,需结合数学分析中的经典定理与实际应用场景进行综合判断。根据实数完备性理论,**单调有界函数在定义域为闭区间或半闭区间时必然存在极限**,但其极限存在性可能因定义域的开闭性、函数单侧性质等因素产生差
2025-05-03 04:49:29
94人看过
加人微信怎么打招呼比较好(微信加人话术)
在微信社交场景中,加人打招呼是建立第一印象的核心环节。有效的开场白不仅能提高通过率,还能为后续关系发展奠定基础。优质打招呼需兼顾身份定位、社交礼仪、场景适配和心理共鸣,避免过度营销或冒犯性表达。核心要素包括:简洁明确的自我介绍、清晰的添加目
2025-05-03 04:49:19
105人看过
微信怎么联系商家微信(微信联系商家方法)
在移动互联网时代,微信作为国民级社交平台,已成为用户与商家建立联系的重要渠道。通过微信联系商家的方式多样,涵盖公众号、小程序、扫码添加、企业微信等路径,不同场景下各有优劣。例如,公众号提供标准化服务入口但互动延迟较高,小程序则支持即时沟通但
2025-05-03 04:49:14
154人看过
路由器管理员密码和wifi密码(路由管理WiFi密码)
路由器管理员密码与WiFi密码是网络安全防护体系中的两个核心要素,分别承担着设备管理权限控制和无线数据传输加密的双重职责。管理员密码作为访问路由器后台配置界面的通行证,直接决定设备功能调控权归属;而WiFi密码则是无线终端接入认证的关键凭证
2025-05-03 04:49:15
218人看过