javascript正則表達式


我接觸正則的第一個例子:
找出字符串中全部數字:正則表達式

 1 var str = '1 h2jg2hj3g4ghj23423hj1';
 2 //要求輸出結果["1", "2", "2", "3", "4", "23423", "1"]
 3 
 4 var arr = [];
 5 var tmp = '';
 6 
 7 for (var i=0; i<str.length; i++) {
 8     var v = parseInt(str.charAt(i));
 9 
10     if (!isNaN(v)) {
11         tmp += v;
12     } else {
13         if (tmp != '') {
14             arr.push(tmp);
15             tmp = '';
16         }
17     }
18 }
19 
20 if (tmp != '') {
21     arr.push(tmp);
22 }
23 
24 console.log(arr);

一樣的需求用正則超簡單json

1 var arr2 = str.match(/\d+/g);
2 console.log(arr2);

1,正則的寫法:數組

var re1 = new RegExp('a'); // 寫法1
console.log(re1);
var re2 = /a/;  // 寫法2
console.log(re2);

// 想起了一樣有兩種寫法的 數組和json
//var j1 = new Object();
//var j2 = {};

//var arr1 = new Array(1,2,3);
//var arr2 = [1,2,3];

2,函數

轉義:轉換意思spa

轉義字符:有特殊意義的字符code

/**
 *  \
 *  \n 換行
 *  \r 回車
 *  \t 製表符
 *  \a 響鈴
 */
//alert('通知\\n\'今天有雨,請不要帶傘!\'');

var re3 = /\d/;
console.log(re3);
var re4 = new RegExp('\\d'); //兩種寫法的不一樣
console.log(re4);

3,正則表達式經常使用方法orm

 1 /*
 2 * 方法:
 3 * test:
 4 * 正則對象.test(字符串) : 若是字符串中有正則對象匹配的內容,返回true,不然返回false
 5 * */
 6 alert( /\d/.test('ab1sd') );  // \d表明一個數字,在字符串中找到了,返回true
 7 
 8 /*
 9 * search:
10 * 字符串.search(要查找的字符能夠接受正則) : 返回要查找的字符(或者正則匹配的內容)在前面的字符串中首次出現的位置,search參數支持正則
11 * */
12 // 找出’a’所在的位置
13 var str = 'abc';
14 alert(str.indexOf('a'));
15 alert(str.search('a'));
16 alert(str.search(/a/));
17 var str2 = 'Ab9c';
18 alert(str2.search(/a/i)); //i : 當前正則匹配的內容不區分大小寫
19 
20 /*
21 * match:
22 * 字符串.match(字符串|正則) : 在前面在字符串中搜索參數(字符串|正則)匹配的內容,並用數組的形式返回匹配的結果,若是匹配不成功返回null。
23 * */
24 var str = ‘haj123’;    var re = /\d/;     alert( str.match(re) ); //[1]    由於正則匹配成功就會結束,不會繼續匹配。
25 var str = '1 h2jg2hj3g4ghj23423hj1';
26 var arr = str.match(/\d+/g); // g:全局匹配 +:量詞,前面的規則匹配一次或者n次
27 console.log(arr);  //["1", "2", "2", "3", "4", "23423", "1"]
28 
29 /*
30 * replace:
31 * 字符串.replace(要查找的內容,替換內容) : 用「替換內容」替換在字符串中查找到的「要查找的內容」
32 * replace的第二個參數能夠接受函數,當有內容被匹配的時候,這個函數就會被執行
33 * 這個函數在執行的時候會接收到一些參數,而且這個函數的返回值將做爲當前這一次替換的內容
34 *     第一個參數:當前這一次匹配的內容
35 * */
36 var str = 'abaAc';
37 //var s1 = str.replace('a', '*');
38 //console.log(s1); *baAc
39 
40 var s2 = str.replace(/a/gi, '*');
41 //console.log(s2); *b**c
 1 //敏感詞過濾:
 2 var str2 = "而且這個函數的返回值將做爲當前這一次替換的內容";
 3 
 4 var s3 = str2.replace(/函數|返回值|內容/g, '*');
 5 //console.log(s3); //"而且這個*的*將做爲當前這一次替換的*"
 6 
 7 var s3 = str2.replace(/函數|返回值|內容/g, function(a) {
 8     //console.log(a);
 9     //return 1;
10 
11     var s = '';
12     for (var i=0; i< a.length; i++) {
13         s += '*';
14     }
15 
16     return s;
17 
18 });
19 console.log(s3); //"而且這個**的***將做爲當前這一次替換的***"
 1 /*
 2 * 子項表達式:
 3 * replace
 4 * 第一個參數是整個表達式當前匹配的內容
 5 * 後面的參數就是當前此次匹配的內容的子項對應的內容
 6 * */
 7 var str = 'a1ca2cb33ca56c';   //=>12b33c56
 8 
 9 /*var s1 = str.replace(/a((\d)+)(c)/g, function(a, b, c, d) {
10     console.log(a); //a1c a2c a56c
11     console.log(b); //1 2 56 總結出規律:參數依次表明的子項是按正則表達式中左小括號的順序來排的
12 })*/
13 
14 var s1 = str.replace(/a(\d)+c/g, function(a, b) {
15     console.log(a); 
16     console.log(b);//匹配的是6
17 })
 1 /*
 2 * 小例子:
 3 * 日期處理
 4 * */
 5 var d1 = '2015-3-31';
 6 var d2 = '2015.3.31';
 7 var d3 = '2015/3/31';
 8 var d4 = '2015.3-31';
 9 var d5 = '2015/3-31';
10 var d6 = '2015----3.31';
11 
12 //'2015年3月31日'
13 //\d 一個數字  \D 一個非數字
14 
15 console.log( formatDate(d1) );
16 console.log( formatDate(d2) );
17 console.log( formatDate(d3) );
18 console.log( formatDate(d4) );
19 console.log( formatDate(d5) );
20 console.log( formatDate(d6) );
21 
22 function formatDate(d) {
23     return d.replace(/(\d+)\D+(\d+)\D+(\d+)/g, function($0, $1, $2, $3) {
24         //console.log($0);
25         return $1 + '年' + $2 + '月' + $3 + '日';
26 
27     });
28 }

4,正則表達式字符類:
任意字符:[abc]
實例:o[ab]t——oat、obt 其餘的oct就不符合要求了
範圍:[a-z][0-9]
實例:id[0-9]——id0、id5。好比剛纔的\d,能夠寫成[0-9]
排除:[^a]
實例:o[^0-9]t——oat、o?t、o t ;[^0-9a-z]
組合:[a-z0-9A-Z]對象

//[1-37] 匹配的是1-3和7;若是是1-37,正則應該這樣寫:([1-2]\d)|3[0-7]|\dblog


5,轉義字符:排序

\d : 一個數字 至關於[0-9]
\w : 一個字符(字母、數字、下劃線) [a-z0-9_]
\s : 一個空格
\D : 一個非數字 [^0-9] 例:/\D/判斷不全是數字
\W : 一個非字符[^a-z0-9_]
\S : 一個非空格
\b : 一個邊界符 (若是一個\w的左側或者右側再也不是一個\w,那麼這個地方就會是一個邊界符)
\B : 一個非邊界符

[^0-9] 中括號中的第一個若是是^,那麼表明取反 \D
. 點 : 任意字符 例:/<[^<>]>/g

1 例:
2 var str = 'my name is zmouse';
3 var s = str.replace(/\b/g, '|');
4 console.log(s); //"|my| |name| |is| |zmouse|"

6,子項

\1 : 重複匹配第一個子項匹配的內容
\2 : 重複匹配第二個子項匹配的內容
// /(\w)\s\1/ aa aa
// /(\d)(\s)\2\1/ => 1 1 2 2

 1 //例子:
 2 var str = 'assssjdssskssalsssdkjsssdss';
 3 var arr = str.split('');
 4 str = arr.sort().join(''); //先排序一下,讓相同字符排到一塊兒
 5 var value = '';
 6 var index = 0;
 7 
 8 var re = /(\w)\1+/g;
 9 str.replace(re,function($0,$1){
10         //alert($0);
11         if(index<$0.length){
12             index = $0.length;
13             value = $1;
14         }
15 });
16 alert('最多的字符:'+value+',重複的次數:'+index);
 1 var qq = '200824584';
 2 
 3 // ^ : 若是不是在中括號中出現,表示字符串的起始符
 4 // $ : 表示字符串的結束符
 5 
 6 if ( /^[1-9]\d{4,11}$/.test(qq) ) {
 7     alert('是qq');
 8 } else {
 9     alert('不是qq');
10 }

7,量詞:出現的次數,匹配不肯定的位置

{n} : 正好出現n次
{n,m} : 最少n次,最多m次 例:QQ號碼 ^[1-9]\d{4,11}$
{n,} : 最少n次,最多不限
+ : 至關於{1,} 最少1次,最多不限 例:/\d+/等同於/\d{1,}/
? : 至關於 {0,1} 最少0次,最多1次 例:固定電話,(0\d{2,3}-)?[1-9]\d{7}(-\d{1,5})?
* : 至關於{0,} 最少0次,最多不限

1 var str = ‘12 ff’; alert( str.macth(/\d*/g) ); //有錯,由於空格和f會被認爲出現0次數字
1 // 寫了一個郵箱的驗證:
2 var re = /^\w+@[a-z0-9]+(\.[a-z]){1,3}+$/;
3 if( re.test(oTxt.value) ){ alert(‘郵箱合法’); }else{ alert(‘你寫錯了’); }
1 // 去掉字符串先後空格
2 var str = '   my name is zmouse  ';
3 
4 console.log( trim(str) );
5 
6 function trim(s) {
7     return s.replace(/^\s+|\s+$/g, '');
8 }
相關文章
相關標籤/搜索