ECMAScript通过RegExp类型来支持正则表达式。
定义正则表达式的方式:
字面量:
var expression = /pattern / flags;
使用RegExp构造函数:
接收两个参数:一个时要匹配的字符串模式,另一个是可选的标志字符串。
/*
* 匹配第一个"bat"或"cat",不区分大小写
*/
var pattern1 = /[bc]at/i;
/*
* 与pattern1相同,只不过是使用构造函数创建的
*/
var pattern2 = new RegExp("[bc]at", "i");
字面量模式 | 等价的字符串 |
/\[bc\]at/ | "\\[bc\\]at" |
/\.at/ | "\\.at" |
/name\/age/ | "name\\/age" |
/\d.\d{1,2}/ | "\\d.\\d{1,2}" |
/\w\\hello\\123/ | "\\w\\\\hello\\\\123" |
pattern:可以是任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、向前查找以及反向引用。
flags:标明正则表达式的行为。标志有三个:g、i、m
g:表示全局(global)模式,模式将被应用与所有字符串,而非发现第一个陪陪项时立即停止;
如下图:
i:标识不区分大小写模式,即在正确匹配项时忽略模式与字符串的大小写;
m: 标识多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在模式匹配的项。
元字符包括:
( [ { \ ^ $ | ) ? * + .]}
正则表达式模式(常见的)
括号用于查找一定范围的字符串:
[abc] | 查找方括号之间的任何字符 |
[0-9] | 查找任何从0至9的数字 |
[x|y] | 查找由 | 分隔的任何选项 |
元字符:拥有特殊含义的字符
\d | 查找数字 |
\s | 查找空白字符 |
\b | 匹配单词边界 |
\uxxxx | 查找以十六进制数xxxx规定的Unicode字符 |
如下图:
Quantifiers 定义量词:
n+ | 量词描述n+匹配任何包含至少一个 n 的字符串。 |
n* | n*匹配任何包含零个或多个 n 的字符串。 |
n? | n?匹配任何包含零个或一个 n 的字符串。 |
n{X} | 匹配包含x个n的序列的字符串 |
n{X,Y} | 匹配包含X到Y个n的序列的字符串 |
n{X,} | 匹配包含至少X个n的序列的字符串 |
n$ | 匹配任何结尾为n的字符串 |
^n | 匹配任何开头为n的字符串 |
?=n | 匹配任何其后紧接指定字符串的n的字符串 |
?!=n | 匹配任何其后没有紧接指定字符串n的字符串 |
n+
n*
n?
n{X}、n{X,Y}、n{X,}:
n$ 、^n、:
支持正则表达式的String对象的方法
match()
search(): 方法使用表达式来搜索匹配,然后返回匹配的位置。如果没有找到任何匹配的子串,则返回-1.该方法不执行全局匹配,忽略标志g,它总是返回第一个匹配的位置。
replace(): 方法返回模式被替换处修改后的字符串。
split():把字符串分割为字符串数组。
与之相反的是join():把数组中的所有元素放入一个字符串
RegExp 对象方法(compile、exec、test)
exec():通过指定的模式(pattern)搜索字符串,并返回已找到的匹配项。如果未找到匹配,则返回null
test():通过模式来搜索字符串,然后根据结果返回true或者false
compile():编译正则表达式
var str="Every man in the world! Every woman on earth!";
patt=/man/g;
str2=str.replace(patt,"person");
document.write(str2+"<br />");
patt=/(wo)?man/g;
patt.compile(patt); //同一个变量,改变正则表达式的时候重新编译
str2=str.replace(patt,"person");
document.write(str2);
RegExp实例属性:
global:布尔值,标识是否设置了g标志
multiline:布尔值,表示是否设置了m标志。
ignoreCase:布尔值,表示是否设置了i标志。
source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。
模式局限性
- 匹配字符串开始和结尾的\A和\Z锚(但支持以插入符号(^)和美元符号($)来匹配字符串的开始和结尾。)
- 向后查找(lookbehind)(但完全支持向前查找(lookahead))
- 并集和交集类
- 原子组(atomic grouping)
- Unicode支持(单个字符除外,如\uFFFF)
- 命名的捕获组(但支持编号的捕获组)
- s(single,单行)和x(free-spacing,无间隔)匹配模式
- 条件匹配
- 正则表达式注释
图形化正则表达式: