JS-02 (字符串的正则函数)

String类型提供的正则相关函数

1. 查找敏感词

(1). 查找一个固定的敏感词出现的位置:

var i=str.indexOf("敏感词",fromi)

(2). 用正则模糊查找一个敏感词的位置:

var i=str.search(/正则/i)

(3). 查找敏感词的内容:

a. 查找一个敏感词的内容位置

var arr=str.match(/正则/i)

强调: 不加g时,match返回的arr数组中只有一个敏感词,但是,即有内容,又有位置:

arr=["0":"敏感词内容","index":"敏感词位置"]

b. 查找所有敏感词的内容

var arr=str.match(/正则/ig)

强调: g后,match返回的arr数组中包含所有敏感词的内容,但是,无法显示每个敏感词的位置!

arr=["敏感词1","敏感词2","敏感词3",...]

           0         1         2

match如果找不到,返回null

今后,如果一个函数,有可能返回null!都必须先验证不是null!才能继续使用!如果是null,还要提供备选方案!

(4). 既查找所有敏感词又能获得每个敏感词的位置

reg.exec()

2. 替换敏感词

(1). 简单替换: 将所有敏感词都替换为统一的新值

a. str=str.replace(/正则/ig, "新值")

b. str所有符合正则要求的敏感词都替换为统一的新值,返回新的字符串,保存到变量中。

强调: 字符串在多数编程语言中都是不可变类型

一旦创建,内容不可改变!

所以,所有字符串家的函数: replace(), toUpperCase(), toLowerCase(),都无权修改原字符串,只能返回新字符串。所以,要想获得新字符串,都必须用变量接住返回值。如果不用变量接,则函数肯定执行了,也有返回值,只不过,返回值没人要,被垃圾回收!

vs 数组在js中是可变类型!所以几乎所有数组家提供的函数: sort(), reverse(), push()都不用变量接返回值,而是直接修改原数组!

(2). 高级替换: 根据每个敏感词的不同,动态选择不同的新值替换。

a. str=str.replace(/正则/ig, function(keyword){

return 根据接受的不同的敏感词返回不同的新值

  })

b. 原理:

1). replace会用正则表达式在字符串str中查找所有敏感词

2). 每找到一个敏感词就自动调用一次回调函数。每次调用回调函数时,都会自动将本次找到的敏感词传给回调函数的参数keyword

3). 在回调函数内部,根据本次传入的敏感词是什么,来动态返回不同的新值。

4). replace会自动将回调函数返回的新值替换到字符串中本次找到的敏感词的位置

回调函数: 我们自己定义的函数,但是自己不调用,而是传给别的函数,由别的函数去调用。

(3). 删除敏感词: 其实就是把敏感词替换为""

3. 切割字符串: 将一个字符串按指定的切割符,切割为多段子字符串。

(1). 简单切割: 切割符是固定的

a. var arr=str.split("切割符");

b. 将字符串str按指定的"切割符"切割为多段子字符串

c. 返回值:

1). 返回切割后的多段子字符串组成的数组

2). 切割的结果中不包含切割符

(2). 复杂切割: 切割符不是固定的

a. var arr=str.split(/正则/);

b. 将字符串str按每个符合正则要求的切割符切割为多段子字符串

c. 返回值:

1). 返回切割后的多段子字符串组成的数组

2). 切割的结果中不包含切割符

d. 强调: 切割时,即使不加g,也能找到所有切割符,切割。

(3). 将字符串打散为字符数组:

a. 问题: 虽然字符串长得像数组(下标, .length)但是因为不是数组家孩子所以无法使用数组家的函数

b. 何时: 如果字符串也想调用数组家的函数,就可先打散字符串为字符数组,再调用数组家函数。最后,将处理后的字符数组,再用join("")无缝拼接回字符串。

c. 如何: var arr=str.split("")

d. 返回值: 由打散字符串后的多个字符组成的字符数组。

原文地址:https://www.cnblogs.com/codexlx/p/12463609.html