正則表達式

RegExp?

正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱爲”元字符”)。
正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。正則表達式是煩瑣的,但它是強大的,學會之後的應用會讓你除了提高效率外,會給你帶來絕對的成就感。

語法

var patt=new RegExp(pattern,modifiers);
或更簡單的方法
var patt=/pattern/modifiers;

模式描述了一個表達式模型。
修飾符(modifiers)描述了檢索是否是全局,區分大小寫等。
i - 修飾符是用來執行不區分大小寫的匹配。
g - 修飾符是用於執行全文的搜索(而不是在找到第一個就停止查找,而是找到所有的匹配)
m - 多行匹配模式

在字符串中不區分大小寫找”runoob”:var patt1 = /runoob/i; 全文查找 “is”: var patt1=/is/g;
全文查找和不區分大小寫搜索 “is” var patt1=/is/gi;
注意:當使用構造函數創造正則對象時,需要常規的字符轉義規則(在前面加反斜槓 \)。比如,以下是等價的:

var re = new RegExp("\\w+");
var re = /\w+/;

與正則表達式相關的方法
String的方法:match()返回匹配的數組;
String的方法:replace()返回替換後的字符串;
String的方法:search()參數也可以接受正則表達式,返回第一個與之匹配的子串的起始位置,如果找不到返回-1;
String的方法:split()參數也可以接受正則表達式;
RegExp的方法: exec()返回匹配的數組;
RegExp的方法: test()返回Boolean;

元字符(只列出常用部分)
^ —-匹配輸入字符串的開始位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 也匹配 ‘\n’ 或 ‘\r’ 之後的位置。
RegExpMultiline 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
* —-匹配前面的子表達式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等價於{0,}。
+ —-匹配前面的子表達式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等價於 {1,}。
? —-匹配前面的子表達式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等價於 {0,1}。
當該字符緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 後面時,匹配模式是非貪婪的。
非貪婪模式儘可能少的匹配所搜索的字符串,而默認的貪婪模式則儘可能多的匹配所搜索的字符串。
例如,對於字符串 “oooo”,’o+?’ 將匹配單個 “o”,而 ‘o+’ 將匹配所有 ‘o’。
( ) —-標記一個子表達式的開始和結束位置。子表達式可以獲取供以後使用。要匹配這些字符,請使用 ( 和 )。
{n} —-n 是一個非負整數。匹配確定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的兩個 o。
{n,} —-n 是一個非負整數。至少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。
‘o{1,}’ 等價於 ‘o+’。’o{0,}’ 則等價於 ‘o*’。
{n,m} —-m 和 n 均爲非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,”o{1,3}” 將匹配 “fooooood” 中的前三個 o。
‘o{0,1}’ 等價於 ‘o?’。請注意在逗號和兩個數之間不能有空格。
x|y —-匹配 x 或 y。例如,’z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 則匹配 “zood” 或 “food”。
[xyz] —-字符集合。匹配所包含的任意一個字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。
[^xyz] —-負值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’、’l’、’i’、’n’。
[a-z] —-字符範圍。匹配指定範圍內的任意字符。例如,’[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 範圍內的任意小寫字母字符。
[^a-z] —–負值字符範圍。匹配任何不在指定範圍內的任意字符。例如,’[^a-z]’ 可以匹配任何不在 ‘a’ 到 ‘z’ 範圍內的任意字符。
\b —–匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, ‘er\b’ 可以匹配”never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B —-匹配非單詞邊界。’er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
\d —-匹配一個數字字符。等價於 [0-9]。 \D 匹配一個非數字字符。等價於 [^0-9]。
\s —-匹配任何Unicode空白字符,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
\S —-匹配任何非空白字符。等價於 [^ \f\n\r\t\v]。
\w —-匹配包括下劃線的任何ASCII字符組成的單詞。等價於’[A-Za-z0-9_]’。 \W 匹配任何非單詞字符。等價於 ‘[^A-Za-z0-9_]’。
\num —-匹配 num,其中 num 是一個正整數。對所獲取的匹配的引用。例如,’(.)\1’ 匹配兩個連續的相同字符。

常用的正則表達式整理

//1.匹配開頭的空格多次或者0次和結尾的空格多次或者0次
var str1 = "  ab c ";
var reg1 = /(^\s*)|(\s*$)/g;
lg(reg1.test(str1));

//2.用戶名
var str2 = "AAAz3_545--";
var reg2 = /^[a-zA-Z0-9_-]{3,16}$/;//包含字母數字下劃線及連字符的3-16位用戶名
lg(reg2.test(str2));

//3.密碼
var reg3 = /^[a-zA-Z0-9_-]{6,16}$/;

//4.手機號碼
var str4 = "13611243092";
var reg4 = /^1[34578]\d{9}$/;
//var reg4 = /^1(3|4|5|7|8)\d{9}$/;
lg(reg4.test(str4));

//5.國內電話
var str5 = "010-12345678";
var reg5 = /\d{3}-\d{8}|\d{4}-\{7,8}/;
lg(reg5.test(str5));

//6.電子郵箱
var str6 = "[email protected]";
// var reg6 = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;//只允許英文字母、數字、下劃線、英文句號、以及中劃線組成
var reg6 = /^[\w-]+@[\w-]+(\.[\w-]+)+$/;
lg(reg6.test(str6));

//7.中文字符
var reg7 = /[\u4e00-\u9fa5]/;

//8.至少四位騰訊QQ
var str8 = "173714659";
var reg8 = /^[1-9]\d{4,}$/;//第一位不能爲0
lg(reg8.test(str8));

//9.匹配網址
var reg9 = /^[a-zA-z]+\:\/\/[^\s]*$/;
var reg9 = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;//匹配url

//10.郵政編碼
var str10 = "741000";
var reg10 = /[1-9]\d{5}(?!\d)/;
lg(reg10.test(str10));

//11.匹配18位身份證號
var str11 = "620502199105196131";
// var reg11 = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
var reg11 = /^\d{17}(\d|X|x)$/;
lg(reg11.test(str11));

//12.非負整數
var reg12 = /^[1-9]\d*|0$/;

//13.非正整數
var reg13 = /^-[1-9]\d*|0$/;

//14.整數
var reg14 = /^-?[1-9]\d*$/;

//15.正的浮點數:123.123 / 0.123
var reg15 = /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/;

//16.HTML 標籤 
var str16 = "<div>123</div>";
var reg16 = /^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/;
lg(reg16.test(str16));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章