js正則表達式大全


構造正則表達式
var ex = /[abcd]/gi;  //通過字面常量的方式,一對正斜杠中間寫表達式內容,后面可以跟修飾符。
var re = new RegExp("[abcd]","gi");  //通過構造函數的方式,第一個參數是表達式內容,第二個參數是修飾符

修飾符:

i    執行大小寫不敏感的匹配
g   執行全局匹配,即返回所有匹配的子串,默認只返回第一個匹配
m    多行匹配,^ 和 $ 在字符串的每一行都進行一次匹配。

元字符:

( [ { \ ^ $ | ) ? * + .
\    在字面意義和特殊意義之間進行轉換,例如\/表示字符/。
^    匹配字符串的開頭,例如
$    匹配字符串的結尾
()  小括號里面的元素結合為一組,可以在后面引用它

[]  匹配字符集中的一個字符,例如[abc]表示匹配字符a或b或c;[^abc]表示匹配不等於a或b或c的字符;[a-e]匹配在a到e范圍內的字符;[a-b0-9A-Z_]匹配字母數字和下划線。
|    或操作,例如(jpg|png)表示匹配字符串jpg或字符串png。

{}    表示前面的字符應該出現的次數。{n}表示出現n次;{n,}表示至少出現n次;{n,m}表示出現n次到m次。
*    匹配前面的子表達式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等價於{0,}。
+     匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。
?     匹配前面的子表達式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價於 {0,1}。

大部分元字符與自己最近的元素或組相結合,除了|字符與它所在的組內的前后所有元素相結合。
默認情況下對於出現次數的匹配都采用貪婪匹配的方式,即盡可能地多匹配。例如用/a+/匹配字符串"aaaaaa",將匹配"aaaaaa"而不是"a"。
在次數匹配字符后面加?可將貪婪匹配改為謹慎匹配,例如/a+?/匹配字符串"aaaaaa",將匹配"a"。

預定義類:

.     IE下[^\n],其它[^\n\r]  匹配除換行符之外的任何一個字符
\d    [0-9]                   匹配數字
\D    [^0-9]                  匹配非數字字符
\s    [ \n\r\t\f\x0B]         匹配一個空白字符
\S    [^ \n\r\t\f\x0B]        匹配一個非空白字符
\w    [a-zA-Z0-9_]            匹配字母數字和下划線
\W    [^a-zA-Z0-9_]           匹配除字母數字下划線之外的字符

注:若要匹配字符串中的換行符可以使用[\s\S]進行匹配;

 

 

正則匹配舉例
驗證電子郵件:/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/

以\w起頭,隨后可以包含任意數量的“。”或“-”只要他們之間有一個或多個\w分隔即可(對應於域名檢測);
用戶名之后帶一個@字符;
以\w起頭,隨后可以包含任意數量的“。”或“-”只要他們之間有一個或多個\w分隔即可(對應於郵箱地址檢測);
//以“.”加上2到3個“\w”結尾。(對應於郵箱地址后綴的檢測例如“.com”,“.cn”等)。

驗證文件路徑:/^(http|https|file):\/\/\S+\/\S+/i
文件路徑使用http或https或file開頭,后跟://
然后是任意個非空字符表示的文件路徑
最后是/加上任意非空字符表示的文件名
修飾符i忽略大小寫

正則表達式的使用
RegExp類:
RegExp.source    返回正則表達式的內容    
RegExp.test(s)    測試字符串s是否與正則表達式項匹配    
RegExp.exec(s)    匹配字符串s,返回匹配到的子串和各個組匹配到的子串的數組,若沒有匹配到任何子串則返回null
RegExp.lastIndex 返回最近一次匹配到的位置。默認值為-1

String類:
String.search(re)    //返回re匹配到的第一個位置,若不匹配則返回-1。
String.match(re)    //返回re匹配到的所有子串的數組,若不匹配返回null。
String.split(re)    //用正則表達式匹配到的所有子串來將字符串分割為字符串數組。
String.replace(re, s) //將re匹配到的字符替換為s。(replace方法的第二個參數也可以是函數)

s可以反向引用匹配到的組例如"$2"可反向引用第二次匹配到的字符串,寫成str.replace(re, "$2, $1");

 

(?:pattern) 
非獲取匹配,匹配pattern但不獲取匹配結果,不進行存儲供以后使用。這在使用或字符“(|)”來組合一個模式的各個部分是很有用。例如“industr(?:y|ies)”就是一個比“industry|industries”更簡略的表達式。
(?=pattern)
非獲取匹配,正向肯定預查,在任何匹配pattern的字符串開始處匹配查找字符串,該匹配不需要獲取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始。
(?!pattern)
非獲取匹配,正向否定預查,在任何不匹配pattern的字符串開始處匹配查找字符串,該匹配不需要獲取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
(?<=pattern)
非獲取匹配,反向肯定預查,與正向肯定預查類似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
(?<!pattern)
非獲取匹配,反向否定預查,與正向否定預查類似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。這個地方不正確,有問題 
 
 
var str3 = "haaaaaaaaaaaaaaaabaaaaaaaaaaaab";
console.log(str3.match(/h.*b/));
//haaaaaaaaaaaaaaaabaaaaaaaaaaaab
console.log(str3.match(/h.*?b/));
//haaaaaaaaaaaaaaaab
console.log(str3.match(/ha+/));
//haaaaaaaaaaaaaaaa
console.log(str3.match(/ha+?/));
//ha
var str = "hello123back, hello456back";
console.log(str.match(/hello(?!456).*?back/));
//hello123back
console.log((str.match(/(hello).*/)));
//hello123back, hello456back
console.log((str.match(/(?:hello).*/)));
//hello123back, hello456back
var str2 = '<input type="text" id="xxx" name="xxx" value="xxx" /><input type="hidden" id="xxx" name="xxx" value="xxx" />';
console.log(str2.match(/<input[^>]*?hidden.*?\/>/));
//<input type="hidden" id="xxx" name="xxx" value="xxx" />



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM