正則表達式的使用

test : 正則去匹配字符串,若是匹配成功就返回真,若是匹配失敗就返回假java

test的寫法 : 正則.test(字符串)數組

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

//轉義字符:
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(全局匹配)
量詞 : 匹配不肯定的位置
+ : 至少出現一次spa

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 
 |:或code

 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);//你$個$$$,你$個$$$,你$個$$$,你$個$$$,

 子項
 ()blog

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:表示當前此次被正則匹配的內容
 從第二個參數開始後面的參數分別匹配的子項的內容input

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次。最多不限
+:匹配前面的子表達式一次或屢次
?:匹配前面的子表達式零次或一次
*:匹配前面的子表達式零次或屢次
^不在[]中使用的時候表示整個字符串最開始的行首
 $:行尾it

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]+$/

相關文章
相關標籤/搜索