在处理数据时,查找字符串是一种常见的操作,JavaScript 提供不同的方法来搜索字符串。 其中,最常用的方法包括:search、indexOf、includes 和 match,能够辨别字串里是否有想要查找的文字:

  • String.prototype.search( )
  • String.prototype.indexOf( )
  • String.prototype.match()
  • String.prototype.includes()

接下来会比较这四种方法的不同之处,以及使用范例。


String.prototype.search( ):检测字符串是否包含,有的话回传 index,否则回传 -1


  • 搜索指定字符串,并返回匹配字符串第一个字的索引值
  • 若找不到,则返回 -1
  • 可支持正则表达式
search(regexp)

使用示例:

  • 字符匹配
let str ="Hello world!";let position = str.search("world");

console.log(position);// 6
  • 正则表达式匹配
let str ="Say hello to Hello World!";let rule1 = str.search(/[A-Z]/);// 符合大寫字母 A 到 Zlet rule2 = str.search(/Hello/);// 符合 Hellolet rule3 = str.search(/Hello/i);// i 代表不區分大小寫

console.log(rule1);// 0
console.log(rule2);// 13
console.log(rule3);// 4

String.prototype.indexOf():检测字符串是否包含,有的话回传 index,否则回传 -1


  • 搜索指定字符串,并返回匹配字符串第一个字的索引值
  • 若沒有找到,則返回 -1
  • 第二個參數 position 為選填屬性,代表從哪個 index 找起
  • 与 search() 方法类似,差别在于 indexOf() 不支持正则表达式
indexOf(searchString, position)

使用示例:

  • 找特定字符的 index
let str ="Say hello to hello world!";let position1 = str.indexOf("hello");let position2 = str.indexOf("hello",10);let position3 = str.indexOf("Hello",10);let position4 = str.indexOf("zzz");

console.log(position1);// 4
console.log(position2);// 13
console.log(position3);// -1
console.log(position4);// -1

String.prototype.match():寻找并取出内容,有的话以阵列回传,否则回传 null


  • 搜索指定字符串,并返回一个或多个与指定值匹配的数组
  • 若找不到则返回 null
  • 支持正则表达式
string.match(searchvalue)
string.match(regexp)

使用示例:

  • 字符串匹配
let str ="hello world";let result1 = str.match("hello");let result2 = str.match("Hello");

console.log(result1);// ['hello', index: 0, input: 'hello world', groups: undefined]
console.log(result2);// null
  • 正规表达式匹配:需注意要加上标志,才会返回匹配的所有结果g

找指定字符串 :

let str ="Say hello to hello World!";let result1 = str.match(/hello/);let result2 = str.match(/hello/g);

console.log(result1);// ['hello', index: 4, input: 'Say hello to hello World!', groups: undefined]
console.log(result2);// ['hello', 'hello']

找大写字母:

const paragraph ='Hello, I am fine. Thank you.';const regex =/[A-Z]/;const globalReg =/[A-Z]/g;

console.log(paragraph.match(regex));// ['H', index: 0, input: 'Hello, I am fine. Thank you.', groups: undefined]
console.log(paragraph.match(globalReg));// ["H", "I", "T"]

String.prototype.includes():判断字符串中是否包含指定字符串


  • 找到匹配字符串返回 true; 否则返回 flase
  • 不支持正则表达式
string.includes(searchvalue, start)

使用示例:

let str ="Hello world!";let isPresent1 = str.includes("world");let isPresent2 = str.includes("zzz");

console.log(isPresent1);// true
console.log(isPresent2);// false

小结


过去曾整理过阵列遍历的相关笔记:

项目中时常需要去搜索特定字符串,来达成特定目的。 翻找笔记时,才发现自己竟然还没有整理过这几个 JavaScript 提供的方法的差异。

也借由这个机会,又好好重新复习正则表达式的一些观念,虽然很多时候是需要用到的时候再查就好,但果然原生的底子还是基础中的基础。

此外,也体验了最近正夯的 ChatGPT,给一段关键词写出来的文章,差不多就完成了八七分架构,只需要再多补充一些观念,一篇笔记就热腾腾的诞生了ಠ_ಠ