正则表达式详解

来源:互联网 发布:印度冷战作用知乎 编辑:程序博客网 时间:2024/06/13 23:51

什么是正则表达式?

正则表达式是用来匹配字符串中的字符组合的模式。简写是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对多行进行匹配‘i’和‘g’是常用的两个修饰符

正则表达式的特殊字符:

字符含义\反斜杠,对于其后面的被当做字面量的字符,\会将其转化为特殊字符。
也可以将特殊字符,转化为字面量。例如/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出品,必属精品得意



0 0