es6字符串方法includes()、startswith()、endswith()均返回布尔值,用于判断子串存在性、开头匹配和结尾匹配,区分大小写,支持可选起始索引参数;其中endswith的第二参数表示前n个字符范围,其余两个表示从第n位开始搜索;均不支持正则,需配合normalize处理unicode归一化问题。

ES6 的字符串 API 提供了 includes()、startsWith() 和 endsWith() 三个方法,它们默认基于 Unicode 码点进行**精确子串匹配**,不支持正则、不忽略大小写、不处理 Unicode 组合字符(如带重音符号的字母)的归一化。要实现“精准匹配”,关键在于理解它们的默认行为,并在必要时配合其他手段补足。
includes():判断子串是否存在(含位置偏移)
检查字符串是否包含指定子串,返回布尔值。支持可选的起始搜索位置参数。
- 区分大小写,
"Hello".includes("hello")返回false - 支持从指定索引开始搜索:
"abcabc".includes("ab", 2)→false(从索引 2 开始找 "ab",实际找到的是 "bc") - 对 Unicode 字符串正常工作,例如
"café".includes("é")→true(前提是字符串和搜索项使用相同编码形式,如都为 UTF-16 序列)
startsWith() 和 endsWith():限定匹配位置的精准校验
分别检查字符串是否以某子串开头或结尾,同样区分大小写,且可传入长度参数控制比对范围。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
"JavaScript".startsWith("Java")→true;但"JavaScript".startsWith("java")→false -
"index.js".endsWith(".js", 7)→true(只检查前 7 个字符内的结尾,即 "index.j" 是否以 ".js" 结尾?否;但注意:第二个参数是整个字符串的长度限制,不是截取长度——这里等价于检查"index.js".slice(0, 7)是否以 ".js" 结尾,而"index.j"不以 ".js" 结尾,所以实际结果是false;正确用法如"hello".endsWith("lo", 5)→true) - 若需忽略大小写,需手动转为同一大小写:
str.toLowerCase().startsWith(search.toLowerCase())
处理 Unicode 归一化问题(避免看似相同却匹配失败)
某些字符有多种 Unicode 表示方式(如 "é" 可写作 U+00E9 单码点,也可写作 U+0065 + U+0301 普通 e 加组合重音)。直接用 includes() 可能因归一化差异导致匹配失败。
- 解决方案:先调用
.normalize("NFC")或.normalize("NFD")统一格式再比较 - 例如:
"café".normalize("NFC").includes("é".normalize("NFC"))更可靠 - 注意:normalize 是 ES6+ 原生方法,Node.js 4+ 和现代浏览器均支持
需要正则能力?别硬套字符串 API
如果需求涉及模式匹配(如“数字+下划线+字母”)、捕获分组、全局查找或大小写不敏感等,includes/startsWith 就不够用了。
- 优先使用
RegExp.prototype.test()或String.prototype.match() - 例如不区分大小写的子串检查:
/hello/i.test(str) - 想获取所有匹配位置?用
str.matchAll(/pattern/g)(ES2020+)
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










