JavaScript 基础教程JavaScript 简介JavaScript 用法JavaScript 输出JavaScript 语法JavaScript 语句JavaScript 注释JavaScript 变量JavaScript 数据类型JavaScript 对象JavaScript 函数JavaScript 作用域JavaScript 事件JavaScript 字符串JavaScript 运算符JavaScript 比较和逻辑运算符JavaScript if...else 语句JavaScript switch 语句JavaScript for 循环JavaScript while 循环JavaScript break 和 continue 语句JavaScript typeof, null, undefinedJavaScript 类型转换JavaScript 正则表达式JavaScript 错误throw try catchJavaScript 调试JavaScript 变量提升JavaScript 严格模式 (use strict)JavaScript 使用误区JavaScript 表单JavaScript 表单验证JavaScript 验证 APIJavaScript 保留关键字JavaScript JSONjavascript :void(0) 含义JavaScript 代码规范JavaScript 函数定义JavaScript 函数参数JavaScript 函数调用JavaScript 闭包JavaScript HTML DOMJavaScript DOM- 改变 HTMLJavaScript DOM - 改变 CSSJavaScript HTML DOM 事件JavaScript DOM EventListenerJavaScript DOM 元素(节点)JavaScript 对象类型JavaScript Number 对象JavaScript 字符串(String)对象JavaScript Date 对象JavaScript Array 对象JavaScript Boolean 对象JavaScript Math 对象JavaScript RegExp 对象JavaScript window 对象JavaScript window.screen 对象JavaScript window.location 对象JavaScript window.history 对象JavaScript window.navigator 对象JavaScript 弹窗JavaScript 计时事件JavaScript CookieJS中的if和switch该如何选择?JS优化多分支结构JS中的while和for循环该如何选择?JS优化循环结构JS输出杨辉三角JS定义字符串(3种方式)JS获取字符串长度JS字符串拼接/连接(3种方式)JS字符串查找(6种方法)JS截取字符串JS字符串替换replace()JS字符串大写小写转换JS字符串比较大小JS字符串和数组之间的转换JS给字符串添加HTML标签JS去除字符串前后空格JS Unicode编码和解码JS Base64编码和解码JS在接收表单数据时过滤特殊字符JS自定义编码和解码方案

JS字符串查找(6种方法)

在开发中经常需要检索字符串、查找特定字符串。用户可以选用下面的方法执行对应的操作,说明如表所示。

String 类型的查找字符串方法

字符串方法说明
charAt()返回字符串中的第 n 个字符
charCodeAt()返回字符串中的第 n 个字符的代码
indexOf()检索字符串
lastIndexOf()从后向前检索一个字符串
match()找到一个或多个正则表达式的匹配
search()检索与正则表达式相匹配的子串


查找字符

使用字符串的 charAt() 和 chatCodeAt() 方法,可以根据参数(非负整数的下标值)返回指定位置的字符或字符编码。
对于 charAt() 方法来说,如果参数不在 0 和字符串的 length-1 之间,则返回空字符串;而对于 charCodeAt() 方法来说,则返回 NaN,而不是 0 或空字符串。

示例1

下面示例为 String 类型扩展一个原型方法,用来把字符串转换为数组。在函数中使用 charAt() 方法读取字符串中每个字符,然后装入一个数组并返回。

String.prototype.toArray = function () { 
var 1 = this.length; a = []; //获取当前字符串长度,并定义空数组
if (1) { //如果存在则执行循环操作,预防空字符串
for (var i = 0; i < 1; i ++) { //遍历字符串,枚举每个字符
a.push(this.charAt(i)); //把每个字符按顺序装入数组
}
}
return a; //返回数组
}

应用原型方法:

var s = "abcdefghijklmn".toArray();  //把字符串转换为数组
for (var i in s) { //遍历返回数组,显示每个字符
console.log(s[i]);
}


查找字符串

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

第一个参数为一个子字符串,指定要查找的目标。

第二个参数为一个整数,指定查找的起始位置,取值范围是 0~length-1。

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

如果值为负数,则视为 0,相当于从第一个字符开始查找。

如果省略了这个参数,也将从字符串的第一个字符开始查找。

如果值大于等于 length 属性值,则视为当前字符串中没有指定的子字符串,返回 -1。

示例2

下面代码查询字符串中首个字母 a 的下标位置。

var s = "JavaScript";
var i = s.indexOf("a");
console.log(i); //返回值为1,即字符串中第二个字符

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

示例3

下面代码查询 URL 字符串中首个字母 n 的下标位置。

var s = "www.fly63.com";
var a = s.indexOf("fly63"); //返回值为4,即第一个字符n的下标位置

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

示例4

下面代码分别查询 URL 字符串中两个点号字符下标的位置。

var s = "www.fly63.com";
var b = s.indexOf("."); //返回值为3,即第一个字符.的下标位置
var e = s.indexOf(".", b + 1); //返回值为9,即第二个字符.的下标位置

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

示例5

下面代码按从右到左的顺序查询 URL 字符串中最后一个点号字符的下标位置。

var s = "www.fly63.com";
var n = s.lastIndexOf("."); //返回值为9,即第二个字符.的下标位置

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

示例6

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

var s = "http://www.fly63.com";
var n = s.lastIndexOf(".", 11); //返回值是10

其中第二个参数值 11 表示字符 a (第一个)的下标位置,然后从左侧开始向左查找,所以就返回第一个点号的位置。如果找到,则返回第一次找到的字符串的起始下标值。

var s = "http://www.fly63.com";
var n = s.lastIndexOf("www"); //返回值为7

如果没有设置第二个参数,或者为参数负值,或者参数大于等于 length,则将遵循 indexOf() 方法进行操作。


搜索字符串

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

示例7

下面代码使用 search() 方法匹配斜杠字符在 URL 字符串的下标位置。

var s = "www.fly63.com";
n="s.search("//");"

search() 方法参数定义:

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


匹配字符串

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

示例8

下面代码使用 match() 方法找到字符串中所有字母 c,并返回它们。

var s = "http://www.fly63.com";
var a = s.match(/w/g); //全局匹配所有字符f
console.log(a); //返回数组[w,w,w]。

match() 方法返回的是一个数组,如果不是全局匹配,那么 match() 方法只能执行一次匹配。例如,下面匹配模式没有 n 的修饰符,只能够执行一次匹配,返回仅有一个元素 c 的数组。

var a = s.match(/f/);  //返回数组[f]

如果没有找到匹配字符,则返回 null,而不是空数组。
当不执行全局匹配时,如果匹配模式包含子表达式,则返回子表达式匹配的信息。


链接: https://fly63.com/course/7_537