您现在的位置是: 网站首页> 前端技术> JavaScript JavaScript

JavaScript 实现查找字符串

Smile 2020-10-12 Javascript 阅读:148

简介在web开发中经常需要检索字符串、查找特定字符串,JavaScript中也提供了相关函数用来操作字符串,下面介绍几个相关函数实现查找字符串

1、使用字符串的 indexOf() 和 lastIndexOf() 方法,可以根据参数字符串,返回指定子字符串的下标位置。这两个方法都有两个参数,说明如下

  1. 第一个参数为一个子字符串,指定要查找的目标
  2. 第二个参数为一个整数,指定查找的起始位置,取值范围是 0~length-1

对于第二个参数来说,需要注意一下几个特殊情况

  • 如果值为负数,则视为 0,相当于从第一个字符开始查找
  • 如果省略了这个参数,也将从字符串的第一个字符开始查找
  • 如果值大于等于 length 属性值,则视为当前字符串中没有指定的子字符串,返回 -1

indexOf() 方法是按照从左到右的顺序进行查找的。如果希望从右到左来进行查找,则可以使用 lastIndexOf() 方法来查找

(1)示例1

var str = "JavaScript";
var res1 = str.indexOf("J");
var res2 = str.indexOf("v");
console.log(res1);  //返回值为0,即字符串中第一个字符
console.log(res2);  //返回值为2,即字符串中第三个字符

indexOf() 方法只返回查找到的第一个子字符串的起始下标值,如果没有找到则返回 -1

(2)示例2

var str = "www.yozhisan.com";
var res = str.indexOf("yozhisan");  //返回值为4

(3)示例3

var str = "www.yozhisan.com";
var res1 = str.indexOf(".");  //返回值为3,即第一个字符.的下标位置
var res2 = str.indexOf(".", res1 + 1);  //返回值为12,即第二个字符.的下标位置

如果要查找下一个子字符串,则可以使用第二个参数来限定范围

(4)示例4

lastIndexOf() 方法按从右到左的顺序查询字符串中最后一个点号字符的下标位置

var str = "www.yozhisan.com";
var res = str.lastIndexOf(".");	//返回值为12,即第二个字符.的下标位置

(5)示例5

var str = "www.yozhisan.com";
var res = str.lastIndexOf(".", 8);  //返回值是3,而不是12

lastIndexOf() 方法的第二个参数指定开始查找的下标位置,但是,将从该点开始向左查找,而不是向右查找

lastIndexOf() 方法的查找顺序是从右到左,但是其参数和返回值都是根据字符串的下标按照从左到右的顺序来计算的,即字符串第一个字符下标值始终都是 0,而最后一个字符的下标值始终都是 length-1

2、使用 search() 方法,该方法和 indexOf() 的功能是相同的,查找指定字符串第一次出现的位置,但是 search() 方法仅有一个参数,定义匹配模式。该方法没有 lastIndexOf() 的反向检索功能,也不支持全局模式

参数说明:

  • search() 方法的参数为正则表达式(RegExp 对象)。如果参数不是 RegExp 对象,则 JavaScript 会使用 RegExp() 函数把它转换为 RegExp 对象
  • search() 方法遵循从左到右的查找顺序,并返回第一个匹配的子字符串的起始下标位置值。如果没有找到,则返回 -1
  • search() 方法无法查找指定的范围,始终返回的第一个匹配子字符串的下标值,没有 indexOf() 方法灵活

示例

var str = "www.yozhisan.com";
res1 = str.search("//"); //返回值为0
res2 = str.search("y");	//返回值为4

3、使用 match() 方法能够找出所有匹配的子字符串,并以数组的形式返回

示例

var str = "https://www.yozhisan.com";
var res1 = str.match(/s/);  //匹配一次字符s
var res2 = str.match(/s/g);  //g表示全局匹配所有字符s
console.log(res1);  //返回数组["s", index: 4, input: "https://www.yozhisan.com", groups: undefined]
console.log(res2);  //返回数组["s", "s"]

如果没有找到匹配字符,则返回 null,而不是空数组

当不执行全局匹配时,如果匹配模式包含子表达式,则返回子表达式匹配的信息

非全局匹配返回的数组还包含两个对象属性,其中 index 属性记录匹配文本的起始位置,input 属性记录的是被操作的字符串

很赞哦! (1)

文章评论

站点信息