正则表达式(regular expression)是一个描述字符模式的对象,可以使用正则表达式进行强大的模式匹配和文本检索与替换功能。
1、正则表达式的定义
可以使用两种形式定义一个正则表达式
- 使用RegExp构造函数
var regx = new RegExp('xyz','i');
- 直接使用正则表达式
var regx = /xyz/i;
2、正则表达式的字符类
字符
|
匹配
|
[....]
|
方括号内的任意字符
|
[^....]
|
不在方括号内的任意字符
|
.
|
除换行符和其他Unicode行终止符之外的任意字符
|
\w
|
任何ASCII字符组成的单词,等价于[a-zA-z0-9]
|
\W
|
任何不是ASCII字符组成的单词,等价于[^a-zA-z0-9]
|
\s
|
任何Unicode空白符
|
\S
|
任何非Unicode空白符的字符,注意\w和\S不同
|
\d
|
任何ASCII数字,等价于[0-9]
|
\D
|
除了ASCII数字之外的任何字符,等价于[^0-9]
|
[\b]
|
退格直接量(特例)
|
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”
- /[^(]*/ //匹配一个或多个非左括号的字符
4、正则表达式的选择、分组和引用字符
字符
|
含义
|
|
|
选择,匹配的是该符号左边的子表达式或右边的子表达式,从左到右匹配,
直到发现了匹配项,如果左边的选择项匹配,就忽略右边的匹配项,即使它
产生更好的匹配
|
(...)
|
组合,将几个项组合为一个单元,这个单元可通过”*“、”+“、”?“和”|“等符号
加以修饰,而且可以记住和这个组合相匹配的字符串以供此后的引用使用
|
(?:...)
|
只组合,把项组合到一个单元,但不记忆与该组相匹配的字符
|
\n
|
和第n个分组和第一次匹配的字符相匹配,组是圆括号中的子表达式(也有
可能是嵌套的),组索引是从左到右的左括号数,”(?:“形式的分组不编码
|
5、指定匹配位置(正则表达式中的锚字符)
字符
|
含义
|
^
|
匹配字符串的开头,在多行检索中,匹配一行的开头
|
$
|
匹配字符串的结尾,在多行检索中,匹配一行的结尾
|
\b
|
匹配一个单词的边界,简言之,就是位于字符\w和\W之间的位置,或位于
字符\w和字符串的开头或结尾之间的位置(但需要注意,[\b]匹配的是退格符
|
\B
|
匹配非单词边界的位置
|
(?=p)
|
零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
|
(?!p)
|
零宽负向先行断言,要求接下来的字符不与p匹配
|
6、修饰符
用以说明高级匹配模式的规则,和之前讨论的正则表达式语法不同,修饰符是放在”/“符号之外的,也就是说,它们不是出现在两条斜线之间,而是第二条斜线之后。
字符
|
含义
|
i
|
执行不匹配大小写的匹配
|
g
|
执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止
|
m
|
多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束
|
7、用于模式匹配的String方法
(1)Search()方法
它的参数是一个正则表达式,返回第一个与之匹配的子串的起始位置,如果找不到匹配的子串,将返回-1
如:"javascript".search(/script/i);
如果search()的参数不是正则表达式,则首先会通过RegExp构造函数将它转换成正则表达式,search()方法不支持全局搜索,因为它会忽略正则表达式参数中的修饰符g。
(2)replace()方法
用于执行检索与替换操作,其中第一个参数是一个正则表达式,第二个参数是要进行替换的字符串。如果正则表达式中设置了修饰符g,那么源字符串中所有与模式匹配的子串都将替换成第二个参数指定的字符串,如果不带修饰符g,则只替换匹配的第一个子串。
如:text.replace(/javascript/gi, "JavaScript");
(3)Match()方法
它的唯一参数就是一个正则表达式,返回的是一个由匹配结果组成的数组。
如:"1 plus 2 equals 3".match(/\d+/g) //返回["1","2","3"]
(4)split()方法
用以将调用它的字符串拆分为一个子串组成的数组,使用的分隔符是split()的参数
如:"123,456,789".split(","); //返回["123","456","789"]