正则表达式的使用

test : 正则去匹配字符串,如果匹配成功就返回真,如果匹配失败就返回假

test的写法 : 正则.test(字符串)

 1 var str = 'abcdef'; 2 3 var re = /b/; 4 5 console.log( re.test(str) ); 

//转义字符:
n \n
r \r
t \t
\s : 空格
\S : 非空格
\d : 数字
\D : 非数字
\w : 字符 ( 字母 ,数字,下划线_ )
\W : 非字符*/
console.log(/b/.test('abxhll'));//false
匹配一个单词边界,也就是指单词和空格间的位置
 \d:一个0-9的数字
 一个\d表示一个数字
 1 console.log(/\d/.test('123'));//true 

 String.search();
 String.indexOf();
 两者区别:search支持正则,indexOf不支持正则
 1 console.log("miaov".search('v')); 
 \d匹配一个数字字符。等价于[0-9]。
 \D匹配一个非数字字符。等价于[^0-9]。
 1 console.log("abc1de2".search(/\D\D/)); 
 正则默认区分大小写
 修饰符
 i:忽略大小写
 1 console.log("123A789abc".search(/a/));//7 2 console.log("123A789abc".search(/A/i));//3 
match : 正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null
match的写法 : String.match()
正则默认:正则匹配成功就会结束,不会继续匹配
如果想全部查找,就要加标识 g(全局匹配)
量词 : 匹配不确定的位置
+ : 至少出现一次

1 var str = "abc123bchg456";
2 var re = /\d/;
3 console.log(str.match(re));//["1", index: 3, input: "abc123bchg456"]

 查找全部
 修饰符
 g: 全局

 1 var str = "abc123bchg456"; 2 var re = /\d/g; 3 console.log(str.match(re));// 
 贪婪模式
 +量词
 最少一次最多不限
 1 var str = "ab41c123bchg456"; 2 var re = /\d+/g; 3 console.log(str.match(re));//[41,123,456] 
 replace : 正则去匹配字符串,匹配成功的字符去替换成新的字符串
 replace的写法 : 字符串.replace(正则,新的字符串)
 1 var str = 'welcome to learn java'; 2 console.log(str.replace('earn', '$$$'));//welcome to l$$ java 
 |:或

 1 var content = '你是个好孩子,你是个好孩子,你是个好孩子,你是个好孩子,';
 2 var content1 = content.replace(/好孩子|是/g,'***');
 3 console.log(content1);//你***个***,你***个***,你***个***,你***个***,
 4 
 5 var content2 = content.replace(/好孩子|是/g,function(){
 6 return '$$$$';
 7 });
 8 console.log(content2);//你$$$$个$$$$,你$$$$个$$$$,你$$$$个$$$$,你$$$$个$$$$,
 9 
10 var content3 = content.replace(/好孩子|是/g,function(a){
11 var s = '';
12 for(var i=0;i<a.length;i++){
13 s += '$'
14 }
15 return s;
16 //return '<strong>'+a+'</strong>';
17 });
18 console.log(content3);//你$个$$$,你$个$$$,你$个$$$,你$个$$$,

 子項
 ()

1 var str = 'a11b';
2 //a1或者2b
3 console.log(str.match(/a1|2b/));
4 //a开头b结尾,中间是1或者2
5 console.log(str.match(/a(1|2)b/));//null
6 var str1 = 'a1ba2ba34ba5c';
7 console.log(str1.match(/a\d+b/g),function($0){//a1b a2b a34b

 $0:表示当前这次被正则匹配的内容
 从第二个参数开始后面的参数分别匹配的子項的内容

1 console.log($0);
2 console.log($1);
3 })
4 
5 var str2 = str1.replace(/a\d+b/g,function($0,$1){//a1b a2b a34b

 $0:表示当前这次被正则匹配的内容
 从第二个参数开始后面的参数分别匹配的子項的内容

1 console.log($0);//a1b a2b a34b
2 console.log($1);//0 3 6
3 })
4 console.log(str2);//undefinedundefinedundefineda5c
5 
6 var str = 'abc';
7 var re = /(a)(b)(c)/;
8 console.log(str.match(re));
 1        var str = 'a1ba2ba3ba4ba56b';
 2         console.log(str.match(/a(1|2|3|)b/g));//["a1b", "a2b", "a3b"]
 3         console.log(str.match(/a[123]b/g));//["a1b", "a2b", "a3b"]
 4         console.log(str.match(/a[1-9]b/g));//["a1b", "a2b", "a3b","a4b"]
 5         console.log(str.match(/a[1-37-9]b/g));//["a1b", "a2b", "a3b"]
 6         //^取非
 7         console.log(str.match(/a[^123]b/g));//a4b
 8         //[1-37-9] 1到3 7到9
 9         //[a-zA-Z0-9];
10         //[a-zA-Z0-9_];//=>\w

 量词
{n,m}:最少n次。最多m次 \d{3,5}
{n}:n次
{n,}:最少n次。最多不限
+:匹配前面的子表达式一次或多次
?:匹配前面的子表达式零次或一次
*:匹配前面的子表达式零次或多次
^不在[]中使用的时候表示整个字符串最开始的行首
 $:行尾

1 //验证qq
2 var qq = '1623754758';
3 console.log(/^[1-9]\d{4,11}$/.test(qq));
4 //手机号码
5 var phoneNumber = '';
6 var reg = /^0?1(130|131|132)$/;
7 var arr = [130,131,132];
8 new RegExp('^0?(+arr.join('|'))$');

 转义符
\n:new Line 换行 匹配一个换行符。等价于\x0a和\cJ。
 \r:return 回车 匹配一个回车符。等价于\x0d和\cM。
 \t:table 制表符 匹配一个制表符。等价于\x09和\cI。
\d匹配一个数字字符。等价于[0-9]。
\D匹配一个非数字字符。等价于[^0-9]
\w匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
\W匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
\S匹配任何非空白字符。等价于[^ \f\n\r\t\v]。
\b匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
 \B匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
 . : 表示任意字符但除了\n\r

1 //|abc| |def| |12a| |a_1|&|s|
2 console.log('abc def 12a a_1&s'.replace(/\b/g,'|'));//|abc| |def| |12a| |a_1|&|s|
3 console.log('$$$$$&***$\n####66'.replace(/\S/g,'*'));//
4 console.log('$$$$$&***$####66'.replace(/\S/g,'*'));
5 
6 console.log('$$$$$&***$\n####66'.replace(/\b/g,'|'));
7 console.log('$$$$$&***$\n####66'.replace(/\./g,'*'));
 1 console.log('11'.replace(/(\d)\1/g,'*'));
 2 
 3 console.log('2a2'.replace(/(\d)a\1/g,'*'));
 4 
 5 console.log('a11'.replace(/a(\d)\1/g,'*'));
 6 //123456a6
 7 console.log('123456a6'.replace(/(\d)+a\1/g,'*'));
 8 
 9 console.log('1a21b2'.replace(/(\d)a(\d)\1b\2/g,'*'));//*
10 //嵌套指向
11 console.log('1a21b2'.replace(/(ab(12)(apple)(banaba))c/g,'*'));

找重复项最多的字符和个数:

 1         var str = 'assssjdssskssalsssdkjsssdss';
 2         var arr = str.split('');
 3         str = arr.sort().join('');
 4         console.log(str);//aadddjjkklsssssssssssssssss
 5         var value = '';
 6         var index = 0;
 7 
 8         var re = /(\w)\1+/g;
 9         str.replace(re,function($0,$1){
10             console.log($0);//aa ddd jj kk sssssssssss
11             if(index<$0.length){
12                 index = $0.length;
13                 value = $1;
14             }
15         });
16         console.log('最多的字符:'+value+',重复的次数:'+index);//最多的字符:s,重复的次数:17
 1         //校验年龄16-100
 2         var age = 20;
 3         var re = /^(1[6-9]|[2-9]\d|100)$/;
 4         console.log(re.test(age));//true
 5         //匹配座机例如021-31661688
 6         var phoneNumber = '021-31661688';
 7         var re = /^(0\d{2,3}-)?[1-9]\d{6,7}$/;
 8         console.log(re.test(phoneNumber));//true
 9         //匹配邮箱chen00jian@sina.com
10         var email = 'chen00jian@sina.com',
11         email1 = 'aaaa@163.com';
12         var re = /^\w+@[a-z0-9\-]+(\.[a-z]{2,8}){1,2}$/i;
13         console.log(re.test(email));//true
14         console.log(re.test(email1));//true
15         //单词边界
16         var str = "\bwww\b \bchenyu\b \bcom\b";
17         console.log(str.match(/\b/g).length);//6
18         //去除首行尾空格
19         var str = '  www  baidu  com  ';
20         str = str.replace(/^\s+|\s+$/g,"*");
21         console.log(str);//*www  baidu  com*
22         //除去行尾空格2
23         
24         var str1 = ' www baidu c om ';
25         str1 = str1.replace(/^\s+|\s+$/g,"*");
26         str1 = str1.split(/\s+/).join(" ");
27         console.log("|"+str1+"|");//|*www baidu c om*|
28         //找数字\d匹配一个数字字符 g —— global  全局搜索
29         //match  匹配所有满足条件的东西  返回一个数组
30         var str = "ds23fa 82d d 34f100";
31         var re = /\d+/g;
32         console.log(str.match(re));//["23", "82", "34", "100"]
33         //*匹配前面的子表达式零次或多次 
34         var str = "12sdf22dsf23klj3";
35         var re = /\d*/g;
36         console.log(str.match(re));//["12", "", "", "", "22", "", "", "", "23", "", "", "", "3", ""]
37         console.log(str.match(/\d*/g));//12,,,,22,,,,23,,,,3,
38         //慎用 会多匹配一次
39            //.
40            var str = 'abcd';
41            console.log(str.match(/./g));
42 
43            //replace
44            var str = "abcdefaaaa";
45            console.log(str.replace(/a/g,"%%%%"));//%%%%bcdef%%%%%%%%%%%%%%%%

用户名:/^[a-z0-9_-]{3,16}$/

密码:/^[a-z0-9_-]{6,18}$/

十六进制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/

电子邮箱:/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/

URL:/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

IP 地址:/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/

HTML 标签:/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/

删除代码\\注释:(?<!http:|\S)//.*$

Unicode编码中的汉字范围:/^[\u2E80-\u9FFF]+$/

posted @ 2016-06-01 22:08  待繁华落尽  阅读(506)  评论(0编辑  收藏  举报