什么是正则表达式?
正则表达式是用来匹配字符串中的字符组合的模式。简写是RegExp。
在JavaScript中,正则表达式属于对象。它的常用方法是exec和test,也可使用String的match、replace、search、split方法。
创建正则表达式的两种方式:
一、使用字面量方法创建,如
var reg = /pattern/attributes;
/ /是必须的,它表示正则。这种方式创建正则表达式会在脚本加载之后编译,同时这种方式可以获得更好的性能。
二、使用构造函数的方法创建,如
var reg=new RegExp(pattern,attributes);
这种方式会在正则表达式运行时进行编译,在事先不了解事先它的模式时,用函数的方式更加合适。
参数pattern是一个字符串,制定了正则表达式的模式或其他正则表达式。
参数attributes则是可选的,包括'g'、'i'、'm'后面我们会进行详细的说明。
正则表达式的模式:
正则表达式由简单和特殊的字符组成,如/\d.{0,}/,下面介绍一下两种模式。
一、简单模式:
此模式由找到的字符直接匹配构成,例如,/are/就是简单的模式,在此模式中,只有'are'按照这个顺序出现时才能匹配成功,'how are you’里面的'are'则满足这个情况,而如果改成'howa re you'则匹配不成功,这点相信各位道友能很快理解,请忽略后面这个四不像的英语。
二、特殊字符模式:
当我们需要匹配的内容超过简单模式,包含一些特殊字符或者是空白时我们就需要用到复杂模式了,例如/ab*c/匹配的就是'a'后面跟了0或者多个'b',且最后是一个‘c’的字符组合。在字符串‘cbbabbbcdebc’中,这个模式匹配了字符串‘abbbbc’。
正则表达式的修饰符:
修饰符 | 描述符 |
i | 简单点说就是忽略大小写,大写小写全部匹配 |
g | 全局匹配,而并非只是匹配一个 |
m | 对多行进行匹配 |
正则表达式的特殊字符:
字符 | 含义 |
\ | 反斜杠,对于其后面的被当做字面量的字符,\会将其转化为特殊字符。 也可以将特殊字符,转化为字面量。例如/a*/代表匹配0个或者多个a,如果写成/a\*/则将*的特殊性移除,从而匹配像a*这样的字符串 注意:使用函数形式时要将\进行转义,因为\在字符串里也是一个转义字符 |
^ | 匹配输入的开始,如/^a/匹配的是‘abc’中的a,并不会匹配‘bac’中的a 注意:当^作为一个字符出现在一个字符串的首位,它将有不同的含义 |
$ | 匹配输入的结束,如/t$/并不会匹配‘pattern’中的‘t’,但会匹配'let'中的t |
* | 匹配前一个表达式至少0次,等价于{0,},关于花括号后面我们再讲 |
+ | 匹配前一个表达式至少1次,等价于{1,} |
? | 匹配前一个表达式0-1次,等价于{0,1},如果它跟在任何量词*、+、?、{}的后面,将会使量词变为非贪婪的(匹配尽量少的字符),例如,对'4873wufs’,使用/\d+/匹配则会返回‘4873’,这是贪婪模式(匹配尽量多的字符),若使用/\d+?/匹配则只返回‘4’.\d表示匹配数字 |
. | 小数点匹配除了换行符\n意外的任何单个字符。例如用/.n/匹配‘hey,an apple is on the ground’,返回的是‘an’和‘on’ |
正则表达式中的元字符:
符号 | 含义 |
\w | 查找单个字符 |
\W | 查找费单个字符 |
\d | 查找数字 |
\D | 查找非数字字符 |
\s | 查找空白字符 |
\S | 查找非空白字符 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
\0 | 查找NUL字符 |
\n | 查找换行符 |
\xxx | 查找以8进制数xxx规定的字符 |
\xdd | 查找以16进制数dd规定的字符 |
\uxxxx | 查找以16进制数xxxx规定的Unicode字符 |
上面是经常用到的,下面几个用的稍微要少一些。
\f 查找换页符
\r 查找回车符
\t 查找制表符
\v 查找垂直制表符
正则表达式中的方括号:
表达式 | 描述 |
[abc] | 查找方括号之间的任何字符 |
[^abc] | 查找任何不在方括号之间的字符 |
[0-9] | 查找从0-9的数字 |
[a-z] | 查找任何从a-z的字符 |
[A-Z] | 查找任何从A-Z的字符 |
[A-z] | 查找任何从A-z的字符 这里的的编码是按照ASCII编码的顺序排列 |
(a|b|c) | 这里的'a'、‘b’、‘c’可以替换,|表示或者,此句是找到三者中的任何选项 |
正则表达式的量词:
之前提到的+、*、?就不再重复了。
量词 | 含义 |
n{x} | 匹配包含x个n字符的字符串 |
n{x,y} | 匹配包含x个且或y个字符的字符串 |
n{x,} | 获取至少x个n字符的字符串 |
?=n | 匹配任何其后紧接n字符的字符串 |
?!n | 匹配任何其后没有紧接n字符的字符串 |
正则表达式的使用:
方法及描述:
exec:一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。
test:一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
match:一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。
search:一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
replace:一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
split:一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。
今天先给大家简单介绍下正则表达式,关于它的使用,请听下次讲解。webEmmet出品,必属精品