Cirry's Blog

RegExp

Jan 3, 2017
技术 js
8分钟
1454字

印象笔记迁移

定义的方法

var box = new RegExp('Box');//第一个参数是模式字符串
alert(box); // /Box/ 两个反斜杠是正则表达式的自变量表示法
var box = new RegExp('Box','ig');//模式修饰符i:忽略大小写 g:全局查找 m:多行查找
var box = /Box/gi; //使用字面量的正则带修饰符,不加引号

测试正则表达式

test()方法:

var pattern = new RegExp('Box');
var str = 'box';
alert(pattern.test(str)); //false; test()方法返回true或false

等价于

alert(/Box/.test('box')); //false

test()检测是否包含:

var pattern = /Box/i;
var str = 'This is a box!';
alert(pattern.test(srt)); //true

exec()方法:

var pattern = /Box/i;
var str = 'This is a box';
alert(pattern.exec(str)); //返回的是数组的值,没有就返回null

string对象的正则表达式

match()方法:

var pattern = /Box/ig;
var str = 'This is a Box!That is a Box!';
alert(str.match(pattern)); //Box,Box 返回匹配的数组

search()方法:

var pattern = /xox/i
var str = 'This is a Box!That is a Box!';
alert(str.search(pattern)); //找到返回找到的位置,找不到返回-1

replace()方法:

var pattern = /Box/gi;
var str = 'This is a Box!That is a Box!';
alert(str.replace(pattern,'Tom')); //替换匹配到的字符串

split()方法:

var pattern = / /gi;
var str = 'This is a Box!That is a Box!';
alert(str.split(pattern)); //拆分

静态属性和实例属性

/*静态属性,也可以使用短名*/
var pattern = /google/i;
var str = 'This is google!';
pattern.test(str); //必须执行一下这句话才有效果
alert(RegExp.input); //This is google
alert(RegExp.leftContext); //This is
alert(RegExp.rightContext); //!
alert(RegExp.lastMatch); //google
alert(RegExp.lastParen); //分组
alert(RegExp.multiline); //多行
/*实例属性*/
var pattern = /google/gi;
alert(pattern.global); //是否开启全局
alert(pattern.ignoreCase); //是否忽略大小写
2 collapsed lines
alert(pattern.source); //源字符串
alert(pattern.lastIndex); //最后一次匹配的位置,也可以自己设置

获取控制

字符类

var pattern = /g..gle/; //.字符匹配除了换行符外的任意字符
var pattern = /go*gle/; //o*,表示0个,1个或者n个
var pattern = /go+gle/; //o+,表示一个或者多个
var pattern = /go?gle/; //o?,表示一个或者0个
var pattern = /g.?gle/; //.?,表示一个或者0个的任意字符
var pattern = /go{2,4}gle/; //o{2,4},表示匹配o2-4次包含2次和4次
var pattern = /go{3,}gle/; //o{3,},表示为3个或者3个以上
var str = 'google';
alert(pattern.test(str)); true
var pattern = /[a-z]oogle/; //[a-z]26个小写字符
var pattern = /[A-Z]oogle/; //[A-Z]26个大写字母
var pattren = /[0-9]oogle/; //[0-9]匹配数字
var pattern = /[0-9]*oogle/; //匹配任意个数字
var pattern = /[a-zA-Z0-9]oogle/; //[a-zA-Z0-9]表示匹配大小写的都能匹配
var pattern = /[^0-9]oogle/; //[^0-9]表示非0=9的任意字符
var pattern = /[a-z]+/
var str = 'google';
alert(pattern.test(str));

字符类

var pattern = /^[0-9]oogle/; //这个^符号,是在/后面的而不是在[]里面的,false
var pattern = /^[0-9]+oogle/; //true
var str = '444oogle';
alert(pattern.test(str));
var pattern = /\woogle/; //匹配字母,数字及下划线,[a-zA-Z_]
var pattern = /\Woogle/; //表示[^a-zA-Z_];
var pattern = /\doogle/; //表示[0-9]
var pattern = /\Doogle/; //表示[^0-9]
var pattern = /^google$/; //^强制首匹配,&强制尾匹配
var str = 'google';
alert(pattern.test(str));

字符类

var pattern = /google/;
var pattern = /goo\sgle/; //\s表示空白匹配
var pattern = /google\b/; //\b表示到达边界
var pattern = /google|baidu|bing/; //|表示匹配或选择模式
var pattern = /(google){4,8}/; //分组,可以看成一个字符
var str = 'google';
alert(pattern.test(str));
var pattern1 = /8(.*)8/; //匹配88之间的任意字符
var str1 = 'This is a 8google8';
pattern.test(str1); //匹配一下
alert(RegExp.$1); //打印匹配的字符串
var pattern = /8(.*)8/;
var str = 'This is a 8google8';
console.log(str.replace(pattern,'123')); //This is a 132
console.log(str.replace(pattern,'<strong>$1<\/strong>')); //$1表示分组获取字符串匹配到的字符串
var pattern = /(.*)\s(.*)/;
var str = 'google baidu';
alert(str.replace(pattern,'$2 $1')); //baidu和google互换位置

贪婪和惰性

var pattern = /[a-z]/;
var pattern = /[a-z]+/; //这里使用了贪婪模式,所有的字符都变成了1
var pattern = /[a-z]+?/; //使用惰性模式
var pattern = /[a-z]+?/g; //开启全局,并且使用惰性模式,每一个字母替换成1
var str = 'abcdefj';
alert(str.replace(pattern,'1'));
var pattern = /8(.*)8/; //使用了贪婪
var str = '8google8 8google8 8google8'; //匹配到了8google8 8google8 8google8
document.write(str.replace(pattern,'<strong>$1</strong>'));
var pattern = /8(.*?)8/g; //使用了惰性
var str = '8google8 8google8 8google8';
document.write(str.replace(pattern,'<strong>$1</strong>'));

exec() // 返回数组:

var pattern = /^[a-z]+\s[0-9]{4}$/;
var str = 'google 2012';
alert(pattern.exec(str));
alert(typeof pattern.exec(str)); //object
var pattern = /^([a-z]+)\s([0-9]{4})/
var str = 'google 2012';
var a = pattern.exec(str);
alert(a.length);
alert(a[0]); //返回整个字符串
alert(a[1]); //返回字符串的第一个数值
alert(a[2]); //返回字符串第二个数值

捕获性分组

var pattern = /(\d+)([a-z]+)/; //捕获性分组,所有的分组都捕获
var str = '123abc';
var a = pattern.exec(str);
alert(a[0]);

非捕获性分组:

var pattern = /(\d+)(?:[a-z])/; //非捕获性分组,只要在不需要捕获返回的分组加上?:
var str = '123abc';
alert(pattern.exec(str)); //123a,123

嵌套分组:

var pattern = /(a?(b?(c?)))/;
var str = 'abc';
alert(pattern.exec(str)); //abc,abc,bc,c

前瞻性捕获:

var pattern = /goo(?=gle)/; //goo后面必须是gle,才能返回
var str = 'google';
alert(pattern.exec(str)); ///返回的是goo,而不是google,这是前瞻性捕获

特殊字符匹配:

var pattern = /\[/; //用反斜杠转义特殊字符,才能匹配
var str = '[';
alert(pattern.test(str));

换行模式:

var pattern = /^\d+/gm; //限定了首匹配,并且开启换行模式
var str = '1.baidu\n2.google\n3.bing';
alert(str.replace(pattern,'#'));

常用的正则

检查邮政编码:

var pattern = /[1-9][0-9]{5}/;
var str = 'This is 230000!'; //必须6位,数字,第一位不为0
alert(pattern.test(str));

检查文件压缩包:

//var pattern = /(文件名)\.(扩展名)/
var pattern = /^[\w\-]+\.(zip|gz|rar)$/; //竖线的选择符必须用分组符号包含起来
var str = '2-13.zip'; //文件名:字母_数字.zip/gz/rar/7z
alert(pattern.test(str));

删除多余字母空格:

var pattern = /\s/g;
var str = '111 222 333 555';
alert(str.replace(pattern,''));

删除首位空格:(3种方法)

var pattern = /^\s+/; //强制首
var str = ' goo gle ';
var result = str.replace(pattern,'');
pattern = /\s+$/; //强制尾
result = result.replace(pattern,'');
alert('|'+result+'|');
//var pattern = /^\s+(.+)\s+$/; //(.+)贪婪模式会匹配goo后面的所有字符
var pattern = /^\s+(.+?)\s+$/; //使用惰性模式
var str = ' goo gle ';
var result = pattern.exec(str)[1];
alert('|'+result+'|');
var pattern = /^\s+(.+?)\s+$/; //使用的分组模式
var str = ' goo gle ';
var result = str.replace(pattern,'$1');
alert('|'+result+'|');

简单的电子邮件验证:

var pattern = /^([\w\.\-]+)@([\w\-]+)\.([a-zA-Z]{2,4})$/;
var str = '81xxxx53@qq.com';
alert(pattern.test(str));
本文标题:RegExp
文章作者:Cirry
发布时间:Jan 3, 2017
感谢大佬送来的咖啡☕
alipayQRCode
wechatQRCode
总访问量
总访客数人次