javascript怎样进行字符串处理【教程】
技术百科
紅蓮之龍
发布时间:2026-01-25
浏览: 次 JavaScript字符串处理应优先使用slice()截取、includes()判断包含、toLocaleLowerCase()处理大小写,并注意Unicode字符和正则全局标志g;避免substr()废弃方法及indexOf()误判。
JavaScript 字符串处理不需要引入任何库,所有操作都基于原生 String 类型的方法和 RegExp 对象,但很多开发者会误用或忽略边界情况,导致替换失败、大小写异常、Unicode 截断等问题。
字符串截取用 slice() 而不是 substring() 或 substr()
slice() 支持负数索引(从末尾开始计),语义清晰,且不会自动交换参数顺序;substring() 会把小数放前面、大数放后面,substr() 已被废弃(MDN 标记为 deprecated)。
- 要取后 3 个字符:用
'hello'.slice(-3)→'llo' - 要截掉前两个字符:用
str.slice(2),别用str.substring(2)(虽然结果一样,但逻辑不一致) - 负数起始 + 正数结束:如
'abcde'.slice(-4, -1)→'bcd',而substring()不支持负数
大小写转换注意 locale 和非 ASCII 字符
toLowerCase() 和 toUpperCase() 默认按 Unicode Basic Latin 处理,在土耳其语、希腊语等 locale 下可能出错(比如土耳其的 'I'. 应该是 
'ı',不是 'i')。
- 普通英文场景:直接用
str.toLowerCase() - 国际化应用:显式指定 locale,如
str.toLocaleLowerCase('tr-TR') - 避免对含 emoji 或组合字符的字符串调用
toUpperCase()后再比较——某些符号(如 ß)转大写会变成两个字符('ß'.toUpperCase()→'SS'),破坏长度预期
正则替换必须加 g 标志才能全局替换
str.replace(/a/, 'b') 只换第一个 'a';漏掉 g 是最常见错误之一。另外,若替换内容含变量,必须用 RegExp 构造函数,不能直接拼接字符串字面量。
- 全局替换空格:
str.replace(/\s/g, '_') - 动态替换关键词:
const keyword = 'foo'; str.replace(new RegExp(keyword, 'g'), 'bar') - 想保留原始大小写做替换?用函数作为第二个参数:
str.replace(/([a-z])/g, (m, p1) => p1.toUpperCase())
判断是否包含子串优先用 includes(),不用 indexOf() !== -1
includes() 语义明确、可读性强,且支持第二个参数(起始位置);indexOf() 返回数字,容易和 falsy 值混淆(比如 str.indexOf('a') === 0 是合法开头,但 !str.indexOf('a') 会误判)。
- 检查是否存在:
str.includes('http') - 从第 10 个字符后检查:
str.includes('test', 10) - 注意:IE 不支持
includes(),如需兼容,可用str.indexOf('x') >= 0替代,但别用!= -1—— 容易和==混淆
真正麻烦的是 Unicode 字符串操作,比如 emoji('??')、带重音符号的字母('café'),它们在 .length 和 .split('') 中表现异常;处理这类字符串时,应优先考虑 Array.from(str) 或使用 Intl.Segmenter(较新 API),而不是默认的字符索引方式。
# 关键词
# 的是
# 而不是
# 第一个
# 已被
# 不需要
# 第二个
# 不支持
# word
# http
# 对象
# javascript
# java
# String
# 构造函数
# 字符串
# asic
# ASCII
# const
# tr
# Length
# Array
# regexp
# 土耳其
# 希腊语
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Python函数接口稳定性_版本演进解析【指导】
- php订单日志怎么在swoole写_php协程sw
- Windows任务计划服务异常原因_任务调度失败的
- VSC怎么配置PHP的Xdebug_远程调试设置步
- Windows蓝屏BAD_POOL_HEADER故
- Windows家庭版如何开启组策略(gpedit.
- php打包exe怎么传递参数_命令行参数接收方法【
- c++的static关键字有什么用 静态变量和静态
- Windows10系统服务优化指南_Win10禁用
- Mac如何查看电池健康百分比_Mac系统信息电源检
- 如何使用Golang安装API文档生成工具_快速生
- 如何使用Golang实现RPC序列化与反序列化_G
- php中常量能用::访问吗_类常量与作用域操作符使
- C#如何序列化对象为XML XmlSerializ
- Win10怎么卸载鲁大师_Win10彻底卸载鲁大师
- c# 如何深拷贝和浅拷贝
- 如何在 Go 中调用动态链接库(.so)中的函数
- 如何在Golang中写入XML文件_生成符合规范的
- Golang如何测试HTTP中间件_Golang
- 如何在 Go 开发中正确处理本地包导入与远程模块路
- Win11相机打不开提示错误怎么修_相机权限开启与
- Python数据挖掘核心算法实践_聚类分类与特征工
- Win11怎么设置声音输出设备_Windows11
- Drupal 中 HTML 链接被双重转义导致渲染
- Win11如何添加/删除输入法 Win11切换中英
- Python实现图数据库操作_Neo4j核心CRU
- c++中的CRTP是什么 c++奇异递归模板模式【
- Windows10如何更改日期格式_Win10区域
- Python项目维护经验_长期演进说明【指导】
- php485读数据时阻塞怎么办_php485非阻塞
- Golang如何实现基本的用户注册_Golang用
- c++ namespace命名空间用法_c++避免
- 如何使用Golang reflect检查方法数量_
- 如何高效获取循环末次生成的 NumPy 数组最后一
- Win11无法安装软件怎么办_Win11解除应用安
- 如何在 Python 中将 ISO 8601 时间
- c++中如何计算坐标系中两点间距离_c++勾股定理
- Win10系统字体模糊怎么办_Windows10高
- 如何使用Golang log记录不同级别日志_Go
- 如何更改Windows资源管理器的默认启动位置?(
- windows 10应用商店区域怎么改_windo
- c++如何实现一个高性能的环形队列(Ring Bu
- Win11怎么更改管理员名字 Win11修改账户名
- Win11怎么忘记WiFi网络_Win11删除已保
- Win11怎样安装钉钉客户端_Win11安装钉钉教
- 如何在Golang中处理云原生事件_使用Event
- Windows服务无法启动错误1067是什么_进程
- Win11开机速度慢怎么优化_Win11系统启动加
- php怎么下载安装后设置错误日志_phpini l
- 如何在Golang中写入JSON文件_保存结构体数

QQ客服