Cirry's Blog

RegExp

2017-01-03
技术
js
最后更新:2024-04-02
8分钟
1471字

印象笔记迁移

定义的方法

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

测试正则表达式

test()方法:

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

等价于

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

test()检测是否包含:

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

exec()方法:

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

string对象的正则表达式

match()方法:

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

search()方法:

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

replace()方法:

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

split()方法:

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

静态属性和实例属性

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

获取控制

字符类:单个字符和数字

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

字符类:锚元字符匹配

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

字符类:空白字符

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

贪婪和惰性

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

exec() // 返回数组:

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

捕获性分组

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

非捕获性分组:

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

嵌套分组:

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

前瞻性捕获:

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

特殊字符匹配:

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

换行模式:

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

常用的正则

检查邮政编码:

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

检查文件压缩包:

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

删除多余字母空格:

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

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

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

简单的电子邮件验证:

1
var pattern = /^([\w\.\-]+)@([\w\-]+)\.([a-zA-Z]{2,4})$/;
2
var str = '81xxxx53@qq.com';
3
alert(pattern.test(str));
本文标题:RegExp
文章作者:Cirry
发布时间:2017-01-03
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
感谢大佬送来的咖啡☕
alipayQRCode
wechatQRCode