简介
正则表达式描述字符模式,通常用于验证文本值是否符合特定模式(例如验证电话号码位数是否正确),或者替换与特定模式匹配的部分文本值。
用途
- 创建正则表达式模式
- 在模式中使用特殊字符
- 标识多个字符的序列(如“介于7到10个字母之间”)
- 标识字母或数字范围中的任何字母(如“a到m的任何字母”)
- 标识可能的字符集中的字符
- 标识子序列(模式内的片段)
- 基于模式匹配和替换文件
概念和术语
- 元字符(Metacharacter):在正则表达式模式中具有特殊含义的字符,它与从字面意义上在模式中表达该字符相对。
- 转义字符(Escape character):此字符指示应将后面的字符视为元字符,而不是字面字符。
- 标志(Flag):此字符指定有关应如何使用正则表达式模式的一些选项,如是否区分大小写。
- 数量表示符(Quantifier):一个或几个字符,指示应将模式部分重复多少次。例如,使用数量标识符来指定美国邮编应包含5个或9个数字。
- 正则表达式(Regular expression):用于定义字符模式的程序语句,它可用来确认其他字符串是否与该模式匹配,或者替换字符串的一部分。
创建正则表达式实例
- 有两种方法可以创建正则表达式实例。一种是使用正斜杠字符(/)来界定正则表达式,另一种是使用new构造函数。
var pattern1:RegExp = /bob/i;
var pattern2:regExp = new RegExp("bob","i");
- 以上两个正则表达式是等效的。
- 正斜杠内的正则表达式部分定义“模式”。正则表达式还可以在后一个界定斜杠后包含“标志”。这些标志也看作是正则表达式的一部分,但是他们独立于模式。
- 使用new构造函数时,使用两个字符串来定义正则表达式。第一个字符串定义模式,第二个字符串定义标志。
- 如果正则表达式里包含正斜杠或引号,则必须在正斜杠前加上转义字符:
// 1/2
var pattern3:RegExp = /1\/2/;
// eat at "joe's"
var pattern4:RegExp = new RegExp("eat at \"joe's\"","");
var pattern5:RegExp = new RegExp("eat at "joe\'s"',"");
- 请勿在正斜杠界定符定义的正则表达式中对引号使用反斜杠转义字符。同样地,不要在使用new构造函数定义的正则表达式中对正斜杠使用转义字符。下面的正则表达式是等效的,他们定义了模式1/2 “joe’s”:
var pattern1:RegExp = /1\/2 "joe's"/;
var pattern2:RegExp = new RegExp("1/2 \"joe's\"","");
var pattern3:RegExp = new RegExp('1/2 "joe\'s"','');
- 在使用new构造函数定义的正则表达式中,要使用以反斜杠字符开头的元序列时,需要输入两个反斜杠字符。
字符、元字符和元序列
- 下列字符(称为元字符)在正则表达式中具有特殊含义:
^ $ \ . * + ? ( ) [ ] { } | - 元序列和元字符类似,在正则表达式中具有特殊含义。元序列由多个字符组成。
元字符
元字符 | 描述 |
---|---|
^(尖号) | 匹配字符串的开头。设置m(multiline)标志后,尖头还匹配行的开头。尖头用在字符类的开头时表示符号翻转而非字符串的开头。 |
$(美元符号) | 匹配字符串的结尾。设置m(multiline)标志后,$还匹配换行(\n)字符前面的位置。 |
\(反斜杠) | 对特殊字符的特殊元字符含义进行转义 |
.(点) | 匹配任意单个字符。只有设置s(dotall)标志时,点才匹配换行符(\n) |
*(星号) | 匹配前面重复零次或多次的项目 |
+(加号) | 匹配前面重复一次或多次的项目 |
?(问号) | 匹配前面重复零次或一次的项目 |
(和) | 在正则表达式中定义组。以下情况使用组:1.限制逻辑“或”字符|的范围:/(a|b|c)d/;2.定义数量标识符的范围:/(walla.){1,2}/;3.用在逆向引用中。例如,下面的正则表达式中的\1匹配模式的第一个括号组中的匹配内容:/(\w*) is repeated:\1/ |
[和] | 定义字符类,字符类定义单个字符可能的匹配:/[aeiou]/ 匹配所指定字符中的任意一个;在字符类中,使用连字符(-)指定字符的范围:/[A-Z0-9]/ 匹配从A到Z的大写字母或0到9的数字;在字符类中,插入反斜杠对]和-字符进行转义:/[+\-]\d+/ 匹配一个或多个数字前面的+或-;在字符类中,以下字符(通常为元字符)被看作一般字符(非元字符),不需要反斜杠:/{$£]/ 匹配$或£ |
|(竖线) | 用于逻辑“或”操作,匹配左侧或右侧的部分:/abc|xyz 匹配abc或xyz。 |
关于元序列
元序列时在正则表达式模式中具有特殊含义的字符序列。
元序列 | 描述 |
---|---|
{n}{n,}和{n,n} | 指定前一项目的数值数量或数值范围:/A{27}/ 匹配重复27次的字符A;/A{3,}/ 匹配重复3次货更多次的字符A;/A{3,5}/ 匹配重复3到5次的字符A。 |
\b | 匹配单词字符和非单词字符之间的位置。如果字符串中的第一个或最后一个字符是单词字符,则也匹配字符串的开头或结尾。 |
\B | 匹配两个单词字符之间的位置。也匹配两个非单词字符之间的位置。 |
\d | 匹配十进制数字 |
\D | 匹配除数字意外的任何字符 |
\f | 匹配换页符 |
\n | 匹配换行符 |
\r | 匹配回车符 |
\s | 匹配任何空白字符(空格、制表符、换行符或回车符) |
\S | 匹配除空白字符以外的任何字符 |
\t | 匹配制表符 |
\unnnn | 匹配字符代码由十六进制数字nnnn指定的Unicode字符 |
\v | 匹配垂直换页符 |
\w | 匹配单词字符(A-Z、a-z、0-9或_)。请注意,\w不匹配非英文字符,如é、ñ或ç |
\W | 匹配除单词字符以外的任何字符 |
\xnn | 匹配具有指定ASCII值(由十六进制数字nn定义)的字符 |
字符类中字符的范围
- 使用连字符指定字符的范围,例如A-Z、a-z或0-9.
- 还可以使用\xnn ASCII字符代码通过ASCII值指定范围。
例如: /[/x90-/x9A]/
反转的字符类
- 如果在字符类的开头使用尖号(^)字符,则将反转该集合的意义,即未列出的任何字符都认为匹配。
- 必须在字符类的“开头”键入尖号字符来表示反转,否则,只是将尖号字符添加到字符类的字符中。
数量表示符
使用数量表示符指定字符或序列在模式中的重复次数。
数量表示符元字符 | 描述 |
---|---|
*(星号) | 匹配前面重复零次或多次的项目 |
+(加号) | 匹配前面重复一次货多次的项目 |
?(问号) | 匹配前面重复零次或一次的项目 |
{n}{n,}和{n,n} | 指定前一项目的数值或数量范围:/A{27}/ 匹配重复27次的字符A;/A{3,}/ 匹配重复3次或更多次的字符A;/A{3,5}/ 匹配重复3到5次的字符A。 |
可以将数量标识符应用到单个字符、字符类或组:
- /a+/ 匹配重复一次或多次的字符a;
- /\d+/ 匹配一个或多个数字;
- /[abc]+/ 匹配重复的一个或多个字符,这些字符可能是a,b或c中的某个;
- /(very, )/ 匹配重复零次或多次的后跟逗号和空格的单词very;
默认情况下,正则表达式执行所谓的“无限匹配”。正则表达式中的任何子模式(如 .)都会尝试在字符串中匹配尽可能多的字符。然后再执行正则表达式的下一部分。
标志和属性
下列的五种标志都可以作为正则表达式对象属性进行访问:
|标志|属性|描述|
|----------
|g|global|匹配多个匹配|
|i|ignoreCase|不区分大小写的匹配,只应用于A-Z和a-z字符|
|m|multiline|设置此标志后,$和^可以分别匹配换行符(\n)|
|s|dotall|设置此标志后, .(点)可以匹配换行符(\n)|
|x|extended|允许扩展的正则表达式。您可以在正则表达式中键入空格,它将作为模式的一部分被忽略。这可以更加清晰可读地键入正则表达式代码|