在日常写代码的时候,经常要判断一个文本里有没有某个关键词。比如搜索功能里,用户输入“手机”,程序就得检查所有商品标题里是否包含“手机”这两个字。这种操作其实就是字符串包含子串判断,听起来简单,但不同语言有不同的写法,用对了事半功倍。
JavaScript 中的常见做法
前端处理文本最多,JavaScript 提供了好几种方式。最常用的是 includes() 方法,直观又安全:
const str = "数码知识屋真不错";
const hasWord = str.includes("知识"); // true
以前很多人用 indexOf(),返回 -1 表示没找到:
const index = str.indexOf("知识"); // 2,不是 -1 就说明存在
如果需要忽略大小写,可以先转成小写再判断:
str.toLowerCase().includes("数码".toLowerCase());
Python 怎么做?
Python 的写法更像说话。直接用 in 关键字就行:
text = "这是一篇关于开发工具的文章"
if "开发工具" in text:
print("包含关键词")
同样支持忽略大小写:
if "开发工具".lower() in text.lower():
print("不区分大小写也匹配")
Java 别走老路
有些老项目还在用 Java,判断子串别再手动遍历字符了。直接上 contains():
String str = "欢迎来到数码知识屋";
boolean contains = str.contains("知识屋"); // true
注意,Java 的 contains() 参数是 CharSequence,不只是字符串也能用。如果要忽略大小写,得配合 toLowerCase() 一起:
str.toLowerCase().contains("知识屋".toLowerCase());
正则表达式:灵活但别滥用
有些场景需要更复杂的匹配,比如判断是否包含“数.*?屋”这样的模式。这时候可以用正则:
// JavaScript
const reg = /数.*?屋/;
reg.test("数码知识屋"); // true
但单纯判断是否包含固定文本时,别用正则,性能差还容易出错。就像拿菜刀削苹果,能用但没必要。
实际应用中的小坑
用户搜索时,常遇到空格、标点问题。比如输入“知识屋”,但原文是“数码知识 屋”,中间有空格。这时候可以预处理,把空格去掉再比:
const cleanStr = str.replace(/\s/g, '');
const cleanSearch = search.replace(/\s/g, '');
cleanStr.includes(cleanSearch);
还有些特殊字符,比如全角半角,也可能导致判断失败。根据业务需求决定是否要做归一化处理。
字符串包含判断看似小事,但在搜索、过滤、权限校验等场景里无处不在。选对方法,代码更清晰,运行也更稳。工具就在手边,用熟了自然顺手。