標籤:asc style 坑爹 Regex date 執行 index window 方法
1、對於generator函數,還不是很理解,之後再續
2、javascript的樂趣_不要問為什麼
不要使用new Number()、new Boolean()、new String()建立封裝對象;
用parseInt()或parseFloat()來轉換任意類型到number;
用String()來轉換任意類型到string,或者直接調用某個對象的toString()方法;
通常不必把任意類型轉換為boolean再判斷,因為可以直接寫if (myVar) {...};
typeof操作符可以判斷出number、boolean、string、function和undefined;
判斷Array要使用Array.isArray(arr);
判斷null請使用myVar === null;
判斷某個全域變數是否存在用typeof window.myVar === ‘undefined‘;
函數內部判斷某個變數是否存在用typeof myVar === ‘undefined‘。
1 123.toString(); // SyntaxError
123..toString(); // ‘123‘, 注意是兩個點!(123).toString(); // ‘123‘
2、對於date對象,一個坑爹的地方是JavaScript的月份範圍用整數表示是0~11,0表示一月,1表示二月……,所以要表示6月,我們傳入的是5!
1 var today = new Date();2 if (today.getMonth() === 2 && today.getDate() === 14) {3 alert(‘親愛的,我預定了晚餐,晚上6點在餐廳見!‘);4 }
以上代碼,真是注孤生的節奏啊......因為這匹配的是3月14號(坑無處不在)。
3、RegExp(Regex)
.可以匹配任一字元,所以:
‘js.‘可以匹配‘jsp‘、‘jss‘、‘js!‘
要匹配變長的字元,在Regex中,用*表示任意個字元(包括0個),用+表示至少一個字元,用?表示0個或1個字元,用{n}表示n個字元,用{n,m}表示n-m個字元:
進階:
[0-9a-zA-Z\_]可以匹配一個數字、字母或者底線;
[0-9a-zA-Z\_]+可以匹配至少由一個數字、字母或者底線組成的字串,比如‘a100‘,‘0_Z‘,‘js2015‘等等;
[a-zA-Z\_\$][0-9a-zA-Z\_\$]*可以匹配由字母或底線、$開頭,後接任意個由一個數字、字母或者底線、$組成的字串,也就是JavaScript允許的變數名;
[a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19}更精確地限制了變數的長度是1-20個字元(前面1個字元+後面最多19個字元)。
A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配‘JavaScript‘、‘Javascript‘、‘javaScript‘或者‘javascript‘。
^表示行的開頭,^\d表示必須以數字開頭。
$表示行的結束,\d$表示必須以數字結束。
你可能注意到了,js也可以匹配‘jsp‘,但是加上^js$就變成了整行匹配,就只能匹配‘js‘了。
1 var re1 = /ABC\-001/;2 var re2 = new RegExp(‘ABC\\-001‘);3 4 re1; // /ABC\-001/5 re2; // /ABC\-001/
RegExp對象的test()方法用於測試給定的字串是否符合條件
1 var re = /^\d{3}\-\d{3,8}$/;2 re.test(‘010-12345‘); // true3 re.test(‘010-1234x‘); // false4 re.test(‘010 12345‘); // false
切分字串:
1 ‘a,b;; c d‘.split(/[\s\,\;]+/); // [‘a‘, ‘b‘, ‘c‘, ‘d‘]
分組、貪婪匹配、全域匹配與搜尋
a.^(\d{3})-(\d{3,8})$分別定義了兩個組,可以直接從匹配的字串中提取出區號和本地號碼
exec()方法在匹配成功後,會返回一個Array,第一個元素是Regex匹配到的整個字串,後面的字串表示匹配成功的子串。
exec()方法在匹配失敗時返回null。
1 var re = /^(\d{3})-(\d{3,8})$/;2 re.exec(‘010-12345‘); // [‘010-12345‘, ‘010‘, ‘12345‘]3 re.exec(‘010 12345‘); // null
b.正則匹配預設是貪婪匹配,也就是匹配儘可能多的字元
1 var re = /^(\d+)(0*)$/;2 re.exec(‘102300‘); // [‘102300‘, ‘102300‘, ‘‘]
讓\d+採用非貪婪匹配(也就是儘可能少匹配),才能把後面的0匹配出來,加個?就可以讓\d+採用非貪婪匹配
1 var re = /^(\d+?)(0*)$/;2 re.exec(‘102300‘); // [‘102300‘, ‘1023‘, ‘00‘]
c.JavaScript的Regex還有幾個特殊的標誌,最常用的是g,表示全域匹配,全域匹配可以多次執行exec()方法來搜尋一個匹配的字串。當我們指定g標誌後,每次運行exec(),Regex本身會更新lastIndex屬性,表示上次匹配到的最後索引
1 var s = ‘JavaScript, VBScript, JScript and ECMAScript‘; 2 var re=/[a-zA-Z]+Script/g; 3 4 // 使用全域匹配: 5 re.exec(s); // [‘JavaScript‘] 6 re.lastIndex; // 10 7 8 re.exec(s); // [‘VBScript‘] 9 re.lastIndex; // 2010 11 re.exec(s); // [‘JScript‘]12 re.lastIndex; // 2913 14 re.exec(s); // [‘ECMAScript‘]15 re.lastIndex; // 4416 17 re.exec(s); // null,直到結束仍沒有匹配到
Regex還可以指定i標誌,表示忽略大小寫,m標誌,表示執行多行匹配
例:匹配email地址:
1 var re = /^[\da-zA-Z]+([._-]\w+)*@([\da-zA-Z]+\.)+[a-zA-Z]{2,6}$/; 2 3 var re = /^<(.+?)>\s*([\da-zA-Z]+[._-]?\[email protected][\da-zA-Z]+\.[a-zA-Z]{2,6})$/; //分組得到email地址的部分內容 4 5 //測試部分: 6 // 測試: 7 var r = re.exec(‘<Tom Paris> [email protected]‘); 8 if (r === null || r.toString() !== [‘<Tom Paris> [email protected]‘, ‘Tom Paris‘, ‘[email protected]‘].toString()) { 9 alert(‘測試失敗!‘);10 }11 else {12 alert(‘測試成功!‘);13 }
javascript的樂趣——0220