基本知识
定义
正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具
基本要素
字符类,数量限定符,位置限定符,特殊符号
- 字符类
| 字符 | 含义 | 举例 |
|---|---|---|
| . | 匹配任何一个字符 | /\d./.test('2离')//true |
| [] | 匹配括号中的任何一个字符 | /[abc]d/.test('ad') |
| - | 在[]中表示字符范围 | /[0-9a-zA-F]/.test('2')//匹配任何一个十六进制数字 |
| 在[]中表示非 | [^xy]1可以匹配a1,b1,但不可以匹配x1 | |
| [[:xxx:]] | grep工具预定的一些命名字符类 | [[:alpha:]]匹配一个字母[[:dilgit:]]匹配一个数字 |
数量限定符
位置限定符
特殊符号
其他普通字符集及其替换
贪婪模式和非贪婪模式
-
贪婪模式 正则表达式匹配时,会尽量多的匹配符合条件的内容
-
非贪婪模式 正则表达式匹配的时候,就尽量少的匹配符合条件的内容,也就是说,一旦发现匹配符合要求,就不会继续匹配下去
方法
正则对象的方法有:exec(),test()
test()方法用于检测一个字符串是否匹配某个模式,如果字符串含有匹配的文本,则返回true,否则返回false
exec()方法用于检测字符串中的正则表达式的匹配。该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为null
如果正则表达式包含圆括号(即含有‘组匹配’),则返回的数组会包含多个成员。第一个成员是整个匹配成功的结果,后面的成员就是圆括号对应的匹配成功的组
也就是说,第二个成员对应的是第一个括号,第三个成员对应第二个括号,以此类推,整个数组的length等于组匹配的数量加一
总结:test,exec方法都会收到特殊属性g的影响,我们设置了全局属性g下一次进行查找时,在正则表达式内部有一个lastIndex来记录匹配的位置,第一次调用test()后,那么lastIndex就不再等于0,从上一次匹配的索引后进行匹配,即相当于匹配字符串'bc123abc',所以返回false;我们可以利用lastIndex,在第二次匹配前设置reg.lastIndex=0来避免这种情况,所以我们在调用以上两个方法时,小心使用全局属性g。
字符串的正则方法有:match(),replace(),search(),split()
match()
可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
默认情况下之后找到第一个符合要求的内容,找到后就停止检索
我们可以设置正则表达式为全局匹配模式,这样就可以匹配到所有的内容
可以为一个正则表达式设置多个匹配模式,且顺序没有关系
match会将匹配到的内通封装到一个数组中返回,及时查询到一个,也是数组
replace()
将字符串中指定的内容替换成新的内容
参数:1)被替换的内容,可以接受正则表达式作为参数 2)新的内容
search()
可以搜索字符串内是否含有指定的内容
如果可以搜到指定内容,则会返回首次出现的所以,没有返回-1
可以接受一个正则表达式作为参数,然后会根据正则表达式去搜索字符串
只会插好第一个,即使甚至全局匹配也没用
split()
可以将一个字符串拆分为一个数组
传递一个字符串作为参数,这个方法将会根据正则表达式来查分字符串
即使不指定全局匹配,也会全部查分