JavaScript中用RegExp对象表示正则表达式,可以用RegExp()构造函数来创建正则表达式,不过更多时候是用对象直接量来创建
如:var re = /s$/;
这个正则表达式可以匹配以字符s结尾的字符串
1.字符类###
把字符放进方括号就变成了字符类,一个字符类可以匹配它所包含的任意字符。
如:/[abc]/
与字母a、b、c中的任意一个都匹配。
常见字符类
[abc]
方括号内任意字符
[^abc]
不在方括号内的任意字符
.
除换行符和其他Unicode行终止符之外的任意字符
\w
任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
\W
任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9]
\s
任何Unicode空白符
\d
任何ASCII数字
2.重复###
{n,m}
匹配前一项至少n次,至多m次
{n,}
匹配前一项n次或更多次
{n}
匹配前一项n次
?
匹配前一项0次或1次
+
匹配前一项1次或多次
*
匹配前一项0次或多次
栗子:
/\d{2,4}/
匹配2-4个数字
/\w{3}\d?
匹配3个字符和一个可选的数字
3.分组###
字符”|“用于分隔供选择的字符,如/ab|cd|ef/
可匹配字符串”ab“,也可匹配”cd“,还可匹配”ef“。
圆括号”()”可用于把单独的项组合成子表达式
4.修饰符###
修饰符放在”/”之外,用语说明匹配模式。JavaScript支持三种修饰符
i 执行不区分大小写的匹配
g 执行全局匹配,即找到所有的匹配,而不是在找到第一个后就停止
m 执行多行匹配。在这种模式下,如果被检索的字符串包含多行,^和$分别匹配每一行的开头和结束
5.指定匹配位置###
^ 匹配字符串的开头
$ 匹配字符串的结尾
\b 匹配单词的边界
(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配
(?!p) 零宽负向先行断言,要求接下来的字符都不与p匹配
/Java(?!Script)/g
匹配以“Java”开头,但接下来的字符不是“Script”的字符串
5.RegExp对象###
- RegExp对象的属性
source:只读的字符串,包含正则表达式的源文本
lastIndex:一个可读写的整数,如果匹配模式带有g修饰符,这个属性用于存储下次匹配的起始位置。 - RegExp对象的方法
exec():检索字符串中指定的值。如果找到匹配的值,返回一个结果数组,并确定其位置。如果没有找到匹配的值,就返回null
var str = 'Hello World';
var re = /Wo/g;
var result = re.exec(str);
if(result != null){
console.log('Find '+result+' at '+result.index);//输出Find Wo at 6
console.log('next search begin at '+re.lastIndex);//输出next search begin at 8
}
test():参数是一个字符串,如果成功匹配,返回true;如果没有匹配到结果,返回false
6.支持正则表达式的String对象的方法###
String对象支持4种使用正则表达式的方法。
- search():参数是一个正则表达式,返回一个与之匹配的子串的起始位置,如果找不到子串,返回-1。
- replace():执行检索和替换。第一个参数是一个正则表达式,第二个参数是一个内容为替换文本的字符串。
//将Lebron James替换为James Lebron
var name = 'Lebron James';
var result = name.replace(/(\w+)\s*\s*(\w+)/g,'$2 $1');
console.log(result);
- match():唯一参数是一个正则表达式,返回一个由匹配结果组成的数组。
//匹配出字符串中的数字,将其保存到一个数组中
var str = 'rgb(237,13,235)';
var result = str.match(/\d+/g);
console.log(result);//输出["237", "13", "235"]
- split():将调用它的字符串拆分成一个子串组成的数组。第一个参数可以是字符串或者正则表达式,第二个可选参数可以指定返回数组的最大长度。