JavaScript RegExp对象和正则表达式

时间:2019-08-20 13:50:45  来源:igfitidea点击:

正则表达式是一个描述字符模式的对象。

JavaScript RegExp类表示正则表达式,String和RegExp都定义了使用正则表达式对文本执行强大的模式匹配和搜索替换函数的方法。

语法

正则表达式可以用RegExp()构造函数定义,如下所示

var pattern = new RegExp(pattern, attributes);
或者
var pattern = /pattern/attributes;

其中:

pattern正则表达式或其他正则表达式的模式。
attributes一个可选的字符串,包含“g”、“i”和“m”属性,分别指定全局、不区分大小写和多行匹配。

正则表达式中的中括号

当在正则表达式上下文中使用中括号([])时,它具有特殊的意义。

表达式说明
[…]括号内的任何一个字符。
(^……)不在括号内的任何一个字符。
[0-9]匹配十进制数字0到9。
[a-z]匹配从小写a到小写z的任何字符。
[A-Z]匹配从大写A到大写Z的任何字符。
[a-Z]匹配从小写a到大写Z的任何字符。

上面表达式的范围是常用的; 我们可以根据需要调整:
比如:使用范围[0-5]匹配从0到5的十进制数字,或者使用范围[b-m]匹配从b到m的任何小写字符。

正则表达式中的量词

量词表示字符或者字符序列重复的次数。 或者说它们出现频率。

表达式说明
i+它匹配任何包含一个或多个i的字符串
i*它匹配任何包含0个或更多i的字符串。
i?它匹配任何最多包含一个i的字符串。
i{N}它匹配任何包含N个i的序列的字符串
i{2,3}它匹配任何包含两个或三个i的序列的字符串。
i{2,}它匹配任何包含至少两个i的序列的字符串。
i$它匹配任何结尾有i的字符串。
^i它匹配任何以i开头的字符串。

正则表达式中的字面量字符

字面量字符是对于某些特殊字符无法打印到纸面,语言规定的,便于人们表述和阅读的文本表达方式。
类似我们用文字来表示实物。 文字“田”描述种东西的土地。

字面量字符说明
英文字母表示字母本身
\0表示 NUL字符
\t表示tab字符
\n表示换行
\v垂直制表符
\f换页符
\r回车
\xnn十六进制nn表示的拉丁字符
\uxxxx十六进制xxxx表示的unicode字符
\cX控制字符,比如\cJ表示换行符

元字符

元字符只是一个前面带反斜杠的字母字符,它的作用是赋予组合特殊的含义。

例如,我们可以使用'\d'元字符来匹配数字。

下表是在PERL风格正则表达式中使用的元字符。

字符说明
.一个字符
\s空白字符(空格、制表符、换行符)
\S非空字符,即不属于\s的字符
\d数字 0到9
\D非数字
\w单词字符 (a-z,A-Z,0-9,_)
\W非单词字符
[\b]退格
[aeiou]匹配集合中的单个字符,aeiou中的一个
[^aeiou]匹配所有不是aeiou的字符
(foo|bar|baz)匹配foo,bar,baz中的任意一个

正则表达式中的小括号

小括号用于捕获组。
当我们要从源字符串中提取所需的匹配项目时,可以通过捕获组来获取。

比如对于 1234abc, 我们要获取其中的数字。
可以使用 (\d+)[a-z]+。然后通过 \1就可以获得所需的数字串。
而没有捕获字母,所以我们没法获取abc的值。
除非我们也加上一个括号:
(\d+)([a-z]+),现在通过 \2可以获取abc

\1\2是根据小括号的顺序进行编号的

修饰符

有一些修饰符可以简化使用regexp的方式,比如区分大小写、在多行中搜索等等。

修饰符说明
i比较时,不区分大小写。
m如果字符串有换行符或回车符,^和$操作符现在将匹配换行符边界,而不是字符串边界
g执行全局匹配,即查找所有匹配项,默认是在第一个匹配项之后停止。

RegExp的属性

属性说明
constructor指定创建对象原型的函数。
global是否设置了“g”修饰符。
ignoreCase是否设置了“i”修饰符。
lastIndex从哪个索引开始执行下一个匹配
multiline是否设置了“m”修饰符。
source模式的文本

RegExp对象的方法

方法说明
exec()执行匹配项搜索。
test()测试其字符串参数是否匹配。
toSource()返回表示指定对象的字面量; 我们可以使用此值创建一个新的RegExp对象。
toString()返回表示指定对象的字符串。