正则表达式

133 阅读3分钟

基本知识

定义

正则表达式(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()

可以将一个字符串拆分为一个数组

传递一个字符串作为参数,这个方法将会根据正则表达式来查分字符串

即使不指定全局匹配,也会全部查分