正則:
它就是一個(gè)規(guī)則,用來處理字符串的一個(gè)規(guī)則(正則就是用來處理字符串的)
1、處理:
a、匹配:判斷一個(gè)字符串是否符合我們制定的規(guī)則---->用test進(jìn)行判斷 test:reg.test(str)
b、捕獲:把字符串中符合我們正則規(guī)則的內(nèi)容捕獲到--->exec:reg.exec(str)
2、如何創(chuàng)建一個(gè)正則
字面量方式: var reg=/\d/;
實(shí)例創(chuàng)建方式:var reg=new RegExp("");
兩種創(chuàng)建方式的區(qū)別:
a、字面量方式中出現(xiàn)的一切都是元字符,所以不能進(jìn)行變量值的拼接,而實(shí)例創(chuàng)建的方式是可以的
b、字面量方式中直接寫\d就可以,而在實(shí)例中需要把它轉(zhuǎn)譯 \\d
在字面量方式中,/ /之間包起來的所有內(nèi)容都是元字符,有的具有特殊意義,大部分都是代表本身含義的普通的元字符
var name="abc";
var reg=/^\d+"+name+"\d+$/g;
console.log(reg.test("1234abc5678")); //--->false
consloe.log(reg.test('1234""""nameeee"5678')); //--->true
以上情況,只能使用實(shí)例創(chuàng)建方式了
var reg=new RegExp("^\\d+"+name+"\\d+$","g");
3、如何學(xué)習(xí)正則:
用console.dir(RegExp.prototype);來學(xué)習(xí),看正則原型上都有哪些方法(用面向?qū)ο笏枷雭韺W(xué)習(xí)js)
正則的元字符及簡單應(yīng)用:
元字符:每一個(gè)正則表達(dá)式都是由元字符和修飾符組成的,【元字符】:在 / /之間具有意義的一些字符
1、具有特殊意義的元字符:
\:轉(zhuǎn)義字符,轉(zhuǎn)譯后面字符所代表的含義
^:以某一個(gè)元字符開始(沒有實(shí)際位置)
$:以某一個(gè)元字符結(jié)尾(沒有實(shí)際位置)eg:
var reg=/\d/; //--->包含一個(gè)0-9之間的數(shù)字`
`var reg=/^\d$/; //^和$放一起用時(shí)代表只能是xxx的意思,只能是一個(gè)0-9之間的數(shù)字
\n:匹配一個(gè)換行符
.:除了\n以外的任意字符
eg:
var reg=/^0.2$/; //以0開頭,以2結(jié)尾,中間可以是除了\n的任意字符`
`var reg=/^0\.2$/; //此時(shí) . 就代表小數(shù)點(diǎn),用轉(zhuǎn)義字符實(shí)現(xiàn)
( ):分組--->把一個(gè)大正則本身劃分成幾個(gè)小正則(var reg=/^(\d+)haha(\d+)$/)
a、分組的作用一:改變x|y的默認(rèn)優(yōu)先級(jí)
eg:
var reg=/^18|19$/;
//符合的有18、19、181、189、119、819、1819....或以1開頭,或以9結(jié)尾;或者以18開頭,或以19結(jié)尾
var reg=/^(18|19)$/; //只能是要么18要么19了
[ ]:
a、在[ ]中出現(xiàn)的所有的字符都是代表本身意思的的字符(沒有特殊含義)
b、中括號(hào)中不識(shí)別兩位數(shù)
var reg=/^[12]$/; //---->不是12,代表1或者2中的一個(gè)
var reg=/^[12-68]$/; //不是12-68,是指1、2-6中的一個(gè)、8,這三個(gè)中的一個(gè)
c、
var reg=/^[\w-]$/; //---->數(shù)字、字母、下劃線、- 中的一個(gè)
x|y:x或者y中的一個(gè)
[xyz]:x或者y或者z中的一個(gè)
[^xyz]:除了xyz三個(gè)以外的任何一個(gè)字符
[a-z]:a-z之間的任何一個(gè)字符
[^a-z]:除了a-z之間的任何一個(gè)字符
\d:一個(gè)0-9之間的數(shù)字
\D:除了0-9之間的數(shù)字以外的任何字符
\b:匹配一個(gè)邊界符
\w:數(shù)字、字母、下劃線中的任意一個(gè)字符。等同于[0-9a-zA-Z_]
\s:匹配一個(gè)空白字符 空格、一個(gè)制表符、換頁符
2、代表出現(xiàn)次數(shù)的量詞元字符:
*:出現(xiàn)零到多次
+:出現(xiàn)一到多次(最少出現(xiàn)一次)
?:出現(xiàn)零次或者一次
{n}:出現(xiàn)n次
{n,}:出現(xiàn)n到多次
{n,m}:出現(xiàn)n到m次
eg:
var reg=/^\d+$/; //只能是一到多個(gè)數(shù)字,且每個(gè)都在0-9之間
var reg=/^1\d{10}$/; //簡單的驗(yàn)證手機(jī)號(hào)的正則:11位數(shù)字,第一位是1;)
元字符的簡單應(yīng)用:
1、有效數(shù)字的正則:(正數(shù)、負(fù)數(shù)、零、小數(shù))
a、“.”可以出現(xiàn)也可以不出現(xiàn),一旦出現(xiàn),后面必須跟著一位或多位數(shù)字
var reg=/^(\.\d+)?$/;
b、最開始可以有+/-,也可以沒有
var reg=/^[+-]?$/;
c、整數(shù)部分,一位數(shù)可以是0-9之間的一個(gè),多位數(shù)不能以0開頭
var reg=/^(\d|([1-9]\d+))$/; //改變優(yōu)先級(jí)了
2、年齡介于18-65之間:
給劃分為三段:18-19,20-59,60-65(有規(guī)律的)
var reg=/^(1[8-9]|[2-5]\d|6[0-5])$/;
3、驗(yàn)證郵箱的正則(簡版):
左邊:數(shù)字、字母、下劃線、“.”、“-”等,例如:123456789@qq.com,12345678@163.com.cn,hahahah@kindle.cn等
var reg=/^[\w.-]+@[0-9a-zA-Z]+(\.[a-zA-Z]{2-4}){1,2}$/; //最后是指(\.[a-zA-Z]{2-4})整個(gè)再出現(xiàn)1或2次(.com.cn);+指重復(fù)一或多次
4、中國標(biāo)準(zhǔn)真實(shí)姓名: 2-4位漢字
var reg=/^[\u4e00-\u9fa5]{2,4}$/;
\u4e00和\u9fa5代表最開始和結(jié)尾漢字的Unicode編碼
5、身份證號(hào)碼:
var reg=/^(\d{2})(\d{4})(\d{4})(\d{2})(\d{2})(\d{2})(\d)(\d|X)$/;
省(2位)+市(4位)+出生年+月+日+(2位數(shù))+性別(1位,男奇數(shù)女偶數(shù))+尾數(shù)(數(shù)或X)