相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
- 拉動懸浮于頂部的JS控制代碼
- 在JavaScript中構(gòu)建ArrayList示例代碼
- js使用for循環(huán)及if語句判斷多個一樣的name
- JavaScript中判斷原生函數(shù)檢查function是否是原生代碼
- jQuery CSS()方法改變現(xiàn)有的CSS樣式表
- JavaScript中判斷原生函數(shù)檢查function是否是原生代碼
- jQuery動畫高級用法(上)——詳解animation中的.queue()函數(shù)
- python小技巧之批量抓取美女圖片
- JS中offsetTop、clientTop、scrollTop、offsetTop各屬性介紹
- JS獲取瀏覽器窗口大小 獲取屏幕,瀏覽器,網(wǎng)頁高度寬度
javascript正則表達式詳解
在基礎(chǔ)篇中我們已經(jīng)講解了如何來使用正則表達式等一些基礎(chǔ)知識,這里我們要講解的是正則表達式中的模式匹配,它們能幫助我們更好更快的寫出漂亮的正則表達式,當然它們也是基礎(chǔ)的知識,更高端正則表達式的需要自己在深入的研究!下面對模式的分類是我自己為其命的名,目的只是能更快更準的記住這些模式。
快捷匹配元字符:
. 點元素:表示匹配一個且必須一個任意字符;(換行符\n除外)
\s 表示匹配一個空格字符
\S 非\s
\d 表示匹配0-9中的任意一個數(shù)字
\D 非\d
\w 表示匹配一個數(shù)字或者字符或則下劃線
\W 非\w
\b 邊界匹配
\B 非\b
這些是最基礎(chǔ)最常用的一些快捷的匹配方式
重復(區(qū)間)匹配元字符:
x* 表示匹配0個或者一個或者多個x
x+ 表示匹配1個或者多個x
x? 表示匹配0個或者1個x
x{m,n} 表示匹配至少m個最多n個x,其中包括了m和n
x{m} 表示精確的匹配m個x
x{m,} 表示匹配m個或者多于m個x
我想大家看到這里已經(jīng)覺得自己能寫出漂亮的正則表達式了,我們來試一試
var regExp = /\d*/;表示匹配0個或者一個或者多個數(shù)字
var regExp = /.+/;表示匹配任意字符一次或者多次;是的你已經(jīng)能寫出一些漂亮的正則表達式了,我們還要更上一層樓,繼續(xù)往下學習;
集合匹配:
[a-z] 表示匹配小寫字符a到z,其中包括了a和z
[a-z0-9] 表示匹配a-z和0-9;這種形式的為集合的復合式的寫法
[^a-z] 表示非a-z中的任意一個字符
分組匹配:
(google) 將Google看為一組也就是一個整體;
分組中有一個很有意思的功能,它匹配到的第一組結(jié)果保存在RegExp.$1中依次類推RegExp.$2....;
例子:
var regExp = /8(google)+8/;
var str = "8googlegoogle8";
var arr = regExp.exec(str);
alert(RegExp.$1); 此處將會彈出google;
邏輯匹配:
| 表示或匹配;如:var regExp = /a|b/;表示匹配a或者b;
限定匹配:
^ 行首匹配,該符號必須寫在第一個/的后面;
$ 行尾匹配,該字符必須寫在最后一個/的前面;
例子:
var regExp = /\d?google/; 表示在google的前面必須要有0個或者1個數(shù)字
var str = "6666google";
var bool = regExp.test(str); 大家很可能會認為這個會返回false,因為Google的前面已經(jīng)超過了一個數(shù)字,但是它會返回true,因為它可以從最后一個6開始匹配,如果var regExp = /^\dgoogle/;這樣寫,那么上面的例子則會返回false,因為它限定了從行首開始匹配;行尾匹配和上面的例子類似,就不在費筆墨了。
有了上面的快捷匹配,重復匹配,集合匹配,分組匹配,邏輯匹配,限定匹配我想絕大部分的運用正則表達式的知識你都能搞定了,然后加上項目的真正的練習我相信我們能更好!
項目經(jīng)驗:
在用exec時我相信大家都很容易犯一個書寫的錯誤,因為我在項目中有過經(jīng)驗教訓,這里分享給大家;
function regExec(str){
var regExp = /8google*8/ig;
var arr = regExp.exec(str);
if(arr.length > 0){....} //如果匹配到的結(jié)果集數(shù)組長度大于0然后執(zhí)行代碼
};
這種寫法的致命之處在于當沒有匹配到時,arr為null,null沒有l(wèi)ength屬性,所以在if中運用null.length將報錯;
正確的寫法是:
if(arr){.....};如果不是null,任何對象將轉(zhuǎn)換為true,而是null時則會轉(zhuǎn)換為false;