正则表达式是一个描述字符模式的对象。 JavaScript 的 RegExp 类表示正则表达式,String 和 RegExp 都定义了方法,后者使用正则表达式进行强大的模式匹配和文本检索与替换功能。
正则表达式定义
正则表达式的直接量定义为包含在一对斜杠 (/) 之间的字符
如:
|
|
正则表达式中的基本元字符
.
通配符(. 除了\n以外的任意一个内容)[]
表示的是范围:表示的是范围中的任意一个[0-9]
表示的是:0到9之间(包含)任意一个数字[a-z]
表示所有的小写字母中的一个[A-Z]
表示的是所有的大写字母中的任意一个[a-zA-Z]
表示的是所有的字母中的任意一个[9]
表示的就是9[0-9a-zA-Z]
表示的是任意的一个数字或者任意的一个字母()
表示的是分组(为了更明确这个正则表达式的意思),提升优先级|
表示的是或者的意思[0-9]|[a-z]
0-9之间的任意一个数字或者是小写字母中的任意一个字母*
表示的是该符号前面的表达式出现了0次到多次+
表示的是该符号前面的表达式出现了1次到多次?
表示的是该符号前面的表达式出现了0次到一次{}
表示的是前面的表达式出现了多少次,具体是多少次:大括号中的写法{n,m}
匹配前一项至少 n 次,但不超过 m 次{n,}
匹配前一项 n 次或者更多次{n}
匹配前一项 0 次或多次,等价于 {0,}
数字、字母、特殊符号
\d
表示的是任意的一个数字和[0-9]
一样\D
表示的是非数字,等价于[^0-9]
\s
空白符号\S
非空白符号\w
非特殊符号,等价于[a-zA-Z0-9]
\W
特殊符号,等价于[^a-zA-Z0-9]
之前的元字符、都是不严格的匹配字符串
^
- (1)、以什么内容开头,必须以什么开始;
- (2)、取反
- 用法:
^[0-9]
必须以数字开头^[a-z0-9]
必须以数字或者以小写字母开始^[0-9a-zA-Z]
必须以数字或者是字母开头^\d
必须以数字开头[^0-9]
取反 字母或者特殊符号[^0-9a-zA-Z]
特殊符号$
必须以什么内容结尾[0-9]$
“hsgd7y273d9”[a-zA-Z]$
^[0-9a-z][a-z]$
指定匹配位置
^
匹配字符串的开头,在多行检索中,匹配一行的开头。$
匹配字符串的结尾,在多行检索中,匹配一行的结尾。\b
匹配一个单词的边界,就是位于 \w 和 \W 之间的位置,或位于字符 \w 和字符串的开头或者结尾之间的位置。\B
匹配非单词边界的位置
修饰符
- i 执行不分区大小写的匹配;
- g 执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止;
- m 多行匹配模式,
^
匹配一行的开头和字符串的开头,$
匹配行的结束和字符串的结束。
在js中正则表达式的写法: /正则表达式/
创建正则表达式对象的方式:
(1)、 var reg=new RegExp(/正则表达式/
(2)、 var reg=/正则表达式/; reg.test(“hello998”);
(3)、 /正则表达式/.方法名(参数);
RegExp 属性
- source
- global
- ignoreCase
- multiline
- lastIndex
选择、分组和引用
正则表达式的语法还包括指定选择项、子表达式分组和引用前一子表达式的特殊字符串。
- 字符
|
用来分隔供选择的字符。- 选择项的尝试匹配次序是从左至右,直到发现了匹配项。如果左边的选择项匹配,就忽略右边的匹配项,即使它产生更好的匹配。
- 圆括号
()
- 圆括号的作用:一个作用是把单独的项组合成子表达式,以便可以处理像一个独立的单元那样用”|”、”*”、”+”、或者”?”等来对单元内的项进行处理。
- 另一个作用是在完整的模式中定义模式。当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和圆括号中的子模式相匹配的部分。
- 允许在同一正则表达式的后部引用前面的子表达式。
- 这是通过在字符 “\” 后加一位或多位数字来实现。这个数字指定了带圆括号的子表达式在正则表达式中的位置。
用于模式匹配的String方法的使用
str=str.replace(/帅/g,"呆");
g表示的是全局; i 表示的是小写的str=str.replace(/^\s+|\s+$/g,"");
while((index=reg.exec(str))!=null){console.log(index.index); }
// 如果结果为null没有匹配的var result=str.match(/帅/g);
// match根据正则表达式匹配字符串中的内容,如果没有g,匹配的是第一个,如果有g匹配的是全局的
- search()
- 参数是一个正则表达式;
- 返回第一个与之匹配的子串的起始位置;
- 找不到返回 -1。
- 如果参数不是正则表达式,则先通过 RegExp 构造函数将它转换成正则表达式;
- search() 方法不支持全局检索,会忽略正则表达式参数中的修饰符 g。
- replace() 方法执行检索与替换操作:
- 第一个参数是一个正则表达式;
- 第二个参数是要进行替换的字符串;
- 如果正则表达式中设置了修饰符 g,那么源字符串中所有与模式匹配的第一个字符串都将替换成第二个蚕食指定的字符串;
- 如果不带修饰符 g, 则只替换所匹配的第一个字符串。
- 如果第一个参数是字符串而不是正则表达式,则 replace() 方法将直接搜索这个字符串。
- 正则表达式如果使用了圆括号括起来的子表达式是带有从左到右的索引编号的,而且正则表达式会记忆与每个子表达式匹配的文本。如果在替换字符串中出现了 $ 加数字,将用于指定的子表达式相匹配的文本来替换这两个字符串。
- replace() 方法的第二个参数还可以是函数,该函数能够动态的计算替换字符串。
- match() 是最常用的 String 正则表达式。
- 唯一的参数是一个正则表达式,返回的是一个有匹配结果组成的数组。
- 如果正则表达式设置了修饰符 g, match() 方法返回的数组包含字符串中的所有匹配结果。
- 如果正则表达式没有设置修饰符,match() 方法就不会进行全局检索,它只检索第一个匹配。
- 即使不设置全局,还是返回一个数组。
- 该数组的第一个元素就是匹配的字符串,余下的元素则是正则表达式中用圆括号括起来的子表达式。因此,如果 match() 返回一个数组 a,那么 a[0] 存放的是完整的匹配,a[1] 存放的则是与第一个用圆括号起来的表达式相匹配的子串,依此类推。
- split()
- split() 方法用以调用它的字符串拆分为一个子串组成的数组,使用的分隔符是 split() 的参数。
RegExp 的方法
- exec() 方法返回一个数组
- exec() 方法对一个指定的字符串执行一个正则表达式,就是在一个字符串中执行匹配检索;
- 给字符串的 match() 传入一个非全局的正则表达式,和给这个正则表达式的 exec() 方法传入的字符串是一模一样的,返回一个数组,数组有两个属性:index 和 input。
- 第一个元素包含的是与正则表达式相匹配的字符串,余下的元素是与圆括号内的子表达式相匹配的子串。
- 属性 index 包含了发生匹配的字符位置,属性 input引用的是正在检索的字符串。
- 当调用 exec() 的正则表达式对象具有修饰符 g 时,它将当前正则表达式对象的 lastIndex 属性设置为紧挨着匹配子串的字符位置。当统一正则表达式第二次调用 exec() 时,它将从 lastIndex 属性所指示的字符处开始检索。如果没有匹配结果,会将 lastIndex 重置为 0;
- test() 方法
- 参数是一个字符串
- 用 test() 对某个字符串进行检测,如果包含正则表达式的一个匹配结果,则返回 true;