正则表达式在许多编程语言中都具有重要得作用,学会立正则表达式对编程处理数据具有事半功倍的作用
正则表达式得模式修饰符
- 参数 | 含义
---- | ---
i | 忽略大小写
g | 全局匹配
m | 多行匹配
1.两种创建方式
var box = new RegExp("box","i");
var box = /box/i;
2.RegExp对象的方法
- 方法 | 功能
---- | ---
exec | 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)
test | 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
match| 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。
search| 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
replace|一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
split| 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法
使用 new 运算符的 test 方法示例
var pattern = new RegExp('box', 'i');
var str = 'This is a Box!';
alert(pattern.test(str));
使用字面量方式的 test 方法示例
var pattern = /box/i;
var str = 'This is a Box!';
alert(pattern.test(str));
使用一条语句实现正则匹配
alert(/box/i.test('This is a Box!')); //模式和字符串替换掉了两个变量
使用 exec 返回匹配数组
var pattern = /box/i;
var str = 'This is a Box!';
alert(pattern.exec(str)); //匹配了返回数组,否则返回 null
使用 match 方法获取获取匹配数组
var pattern = /box/ig;
var str = 'This is a Box!,That is a Box too';
alert(str.match(pattern));
alert(str.match(pattern).length); //查找到返回位置,否则返回-1
PS:因为 search 方法查找到即返回,也就是说无需 g 全局
使用 search 来查找匹配数据
var pattern = /box/ig;
var str = 'This is a Box!,That is a Box too';
alert(str.search(pattern));
使用 replace 替换匹配到的数据
var pattern = /box/ig;
var str = 'This is a Box!,That is a Box too';
alert(str.replace(pattern, 'Tom')); //将 Box 替换成了 Tom
使用 split 拆分成字符串数组
var pattern = / /ig;
var str = 'This is a Box!,That is a Box too';
alert(str.split(pattern)); //将空格拆开分组成数组
字符类
元字符/元符号 | 匹配情况
---- | ---
. | 匹配除换行符以外得任意字符
[a-z0-9] |匹配括号中的字符集中得任意字符
[^a-z0-9]| 匹配任意不在括号中的字符集中得字符
\d|匹配数字
\D|匹配非数字 === [^0-9]
\w|匹配字母数字以及下划线_
\W|匹配非 字母数字以及以及下划线_
\o|匹配null字符
\b|匹配空格字符
\f|匹配进制字符
\n|匹配换行符
\r|匹配回车字符
\t|匹配制表符
\s|匹配空白字符.空格。制表符和换行符
\S| 匹配非 空白字符
^|行首匹配
$|行尾匹配
\A|只有匹配字符串开始处
\b|匹配单词边界,单词在[]内时无效
\B|匹配非单词边界
\G| 匹配当前搜索得开始位置
\Z|匹配字符串结束处或行尾
this| where|匹配this或者where得任意一个记录符 | 匹配情况
---- | ---
\1或者$1 |匹配第一个分组或者第一个分组内得内容
\1或$1| 匹配第一个分组中得内容
? | 匹配0个或一个
- |匹配0个或任意多个
- |匹配至少一个
(xyz)+ |匹配至少一个(xyz)
x{m,n} | 匹配至少m个X,最多n个X
贪婪与惰性 即是在贪婪匹配符后面加?号
- 贪婪 | 惰性
---- | ---
- | +?
{n,m}| {n,m}?
使用点元字符
var pattern = /g..gle/;
var str = 'google';
alert(pattern.test(str));
重复匹配
var pattern = /g.*gle/;
var str = 'google';
alert(pattern.test(str));
使用字符类匹配
var pattern = /g[a-zA-Z_]*gle/;
var str = 'google';
alert(pattern.test(str));
使用锚元字符匹配
var pattern = /^google$/;
var str = 'google';
alert(pattern.test(str));
/^从开头匹配,$从结尾开始匹配
var pattern = /goo\sgle/;
var str = 'goo gle';
alert(pattern.test(str)); //\s 可以匹配到空格
var pattern = /google\b/;
var str = 'google';
alert(pattern.test(str)); //\b 可以匹配是否到了边界
使用或模式匹配
var pattern = /google|baidu|bing/;
var str = 'google';
alert(pattern.test(str));
使用分组模式匹配
var pattern = /(google){4,8}/;
var str = 'googlegoogle';
alert(pattern.test(str)); //匹配分组里的字符串 4-8 次
var pattern = /8(.*)8/; //获取 8..8 之间的任意字符
var str = 'This is 8google8';
str.match(pattern);
alert(RegExp.$1); //获取 8..8 之间的任意字符
贪婪
var pattern = /8(.*)8/;
var str = 'This is 8google8';
var result = str.replace(pattern,'<strong>$1</strong>'); //得到替换的字符串输出
document.write(result);
var pattern = /(.*)\s(.*)/;
var str = 'google baidu';
var result = str.replace(pattern, '$2 $1'); //将两个分组的值替换输出
document.write(result);
使用前瞻捕获
var pattern = /(goo(?=gle))/; //goo 后面必须跟着 gle 才能捕获
var str = 'google';
alert(pattern.exec(str));
使用分组嵌套
var pattern = /(A?(B?(C?)))/; //从外往内获取
var str = 'ABC';
alert(pattern.exec(str)); //abc,abc,bc,a
四.常用的正则
1.检查邮政编码
var pattern = /[1-9][0-9]{5}/; //共 6 位数字,第一位不能为 0
var str = '224000';
alert(pattern.test(str));
2.检查文件压缩包
var pattern = /[\w]+\.zip|rar|gz/; //\w 表示所有数字和字母加下划线
var str = '123.zip'; //\.表示匹配.,后面是一个选择
alert(pattern.test(str));
//\w 表示所有数字和字母加下划线
//\.表示匹配.,后面是一个选择
3.删除多余空格
var pattern = /\s/g;
var str = '111 222 333';
var result = str.replace(pattern,''); //把空格匹配成无空格
alert(result);
4.删除首尾空格
var pattern = /^\s+/; //强制首
var str = 'goo gle '
var result = str.replace(pattern, '');
pattern = /\s+$/; //强制尾
result = result.replace(pattern, '');
alert('|' + result + '|');