您的位置:首页 > 其它

犀牛 ——第10章 正则表达式的模式匹配 10.1 正则表达式的定义

2015-09-09 23:08 387 查看

10.1正则表达式的定义

JavaScript中的正则表达式用RegExp对象表示,可以使用RegExp()构造函数来创建RegExp对象,不过RegExp对象,不过RegExp对象更多的是通过一种特殊的直接量语法来创建。正则表达式直接量定义为包含在一对斜杠(/)之间的字符,例如:

var pattern = /s$/;

用构造函数RegExp()也可以定义个与之等价的正则表达式,代码如下:

var pattern = new RegExp("s$");

运行上面两行代码创建一个新的RegExp对象,并将它赋值给变量pattern。这个特殊的RegExp对象用来匹配所有以字母“s”结尾的字符串。

10.1.1 直接量字符

正则表达式中的所有字母和数字都是按照字面含义进行匹配的。JavaScript正则表达式语法也支持非字母的字符匹配,这些字符需要通过反斜杠(\)作为前缀进行转义。

表10-1:正则表达式中的直接量字符

字符匹配
字母和数字字符自身
\oNULL字符
\t制表符
\n换行符
\v垂直制表符
\f换页符
\r回车符
\xnn由十六进制数nn指定的拉丁字符,例如,\xOA等价于\n
\uxxx由十六进制数xxxx指定的Unicode字符,例如\u0009等价于\t
\cX控制字符^X,

10.1.2 字符类

将直接量字符串单独放进方括号内就组成了字符类。一个字符类可以匹配它所包含的任意字符。因此,正则表达式/[abc]/就和“a”、“b”、“c”中的任意一个都匹配。

字符类可以使用连字符来表示字符范围。要匹配拉丁字母表中的小写字母,可以使用/a-z/.

表10-2:正则表达式的字符类

字符匹配
[...]方括号内的任意字符
[^...]不在方括号内的任意字符
.除换行符和其他Unicode行终止符之外的任意字符
\w任意ASCII字符组成的单词,等价于[a-zA-Z0-9]
\W任意不是ASCII字符组成的单词,等价于[^a-zA-Z0-9]
\s\s任意Unicode空白符
\S\S任意非Unicode空白符的字符,注意\w和\S不同
\d任何ASCII数字,等价于[0-9]
\D除了ASCII数字之外的任何字符,等价于[^0-9]
[\b]退格直接量(特例)

10.1.3重复

在正则模式之后跟随用以指定字符重复的标记。由于某些重复种类非常常用,因此就有一些专门用于表示这种情况的特殊字符。

表10-3:正则表达式的重复字符语法

字符含义
{n,m}匹配前一项至少n次,但不能超过m次
{n,}匹配前一项n次或者更多次
{n}匹配前一项n次
?匹配前一项0次或者1次,也就是说前一项是可选的,等价于{0,1}
+匹配前一项1次或多次,等价于{1,}
*匹配前一项0次或多次,等价于{0,}
例子:

/\d{2,4}/ //匹配2到4个数字

/\w{3}\d?/ //精确匹配三个单词和一个可选的数字

/\s+java\s+/ //匹配前后带有一个或多个空格的字符串“java”

/[^(]*/ //匹配一个或多个非左括号的字符

非贪婪的重复

表10-3中列出的匹配重复字符串是尽可能多地匹配,而且允许后续的正则表达式继续匹配。因此,我们称之为“贪婪的”匹配。

可以使用正则表达式进行非贪婪匹配。只须在待匹配的字符后跟随一个问号即可:“??”、“+?”、“*?”或“{1,5}”。

10.1.4 选择、分组和引用

表10-4:正则表达式的选择、分组和引用字符

字符含义
|选择,匹配的是该符号左边的子表达式或右边的子表达式
(...)组合,将几个項组合为一个单元,这个单元可通过“”、“”、“”和“”等符号加以修饰,而且可以记住和这个组合相匹配的字符串已供此后的引用使用
(?:...)只组合,把项组合到一个单元,但不记忆与该组相匹配的字符
\n和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式(也有可能是嵌套的),组索引是从左到右的左括号数,“?:”形式的分组不编码

10.1.5 指定匹配位置

表10-5:正则表达式中的锚字符

字符含义
^匹配字符串的开头,在多行检索中,匹配一行的开头
$匹配字符串的结尾,在多行检索中,匹配一行的结尾
\b匹配一个单词的边界,简言之,就是位于字符\w和\W之间的位置,或位于字符\w和字符串的开头或者结尾之间的位置
\B匹配非单词边界的位置
(?=p)零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
(?!p)零宽负向先行断言,要求接下来的字符不与p匹配

10.1.6 修饰符

字符含义
i执行不区分大小写的匹配
g执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止
m多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: