? 正則表達(dá)式
每種數(shù)據(jù)都有自己的規(guī)則,正則表達(dá)式可以描述這個規(guī)則,也可以檢測數(shù)據(jù)是否滿足這個規(guī)則。所以正則表達(dá)式就是專門用來校驗(yàn)數(shù)據(jù)而產(chǎn)生的語法,有如下幾個作用;
校驗(yàn)數(shù)據(jù)
提取數(shù)據(jù)
替換數(shù)據(jù)
創(chuàng)建正則表達(dá)式
JS中提供兩種創(chuàng)建正則表達(dá)式的方法,字面量方式、構(gòu)造函數(shù)方式
(1)字面量方式:
var reg=/\d/;? ? //\d是正則表達(dá)式中的元字符 用來表示這是0-9之間的任何一個數(shù)字
(2)構(gòu)造函數(shù)方式:
var reg = new RegExp("\\d{6}");
校驗(yàn)數(shù)據(jù)
正則表達(dá)式.test(字符串)? ? ? ? //正則表達(dá)式提供的方法
var reg=/\d/;
var str='1';
var res= reg.test(str);? //測試字符是否滿足正則表達(dá)式規(guī)則,如果測試到有,返回true
? ? ? 字符串.search(正則表達(dá)式)? ? ? ? //字符串提供的方法
? var reg=/\d/
? var str="asdadsa4dasd"
? var res=str.search(reg)// 驗(yàn)證方法 找到返回下標(biāo) 找不到返回-1
? ? //在字符串中找滿足正則表達(dá)式的那一部分
區(qū)別:
.test()方法是正則表達(dá)式提供的,.search()是字符串提供的,
.test()方法返回布爾值,search()返回下標(biāo)
提取數(shù)據(jù)
正則表達(dá)式.exec(字符串)
? var reg=/\d/
? var str="asdadsa455dasd"
? var res=reg.exec(str)? //字符串中滿足正則表達(dá)式的部分提取出來
//返回一個數(shù)組,內(nèi)容是4
//遇到滿足條件的就返回,所以只提取到4
字符串.match(正則表達(dá)式)
? var reg=/\d/
? ? var str="asd2adsa455dasd"
? ? var res=str.match(reg)//字符串中滿足正則表達(dá)式的部分提取出來
? ? console.log(res[0])
區(qū)別:
? 正則表達(dá)式.exec(字符串),正則表達(dá)式提供的方法
? 字符串.match(正則表達(dá)式) 字符串的方法
相同:
? 都返回一個數(shù)組,只要匹配到符合規(guī)則的數(shù)據(jù)就返回
替換數(shù)據(jù)
字符串.replace(正則表達(dá)式,新的內(nèi)容)
var reg=/\d/
? ? var str="1還是一"
? ? var ment="*"
? ? var res=str.replace(reg,ment)
? ? console.log(res)
? ? //返回:*還是一
正則表達(dá)式中的特殊字符
元字符:用來代表數(shù)據(jù)中的規(guī)則;
這里列舉一些常用的元字符;
\d 代表任意一個數(shù)字
\D 代表任意一個非數(shù)字
\w 代表任意一個數(shù)字、字母、下劃線
\W 代表任意一個非數(shù)字 字母 下劃線
. 代表任意一個字符 統(tǒng)配
\s 代表任意一個空格
\s 代表任意一個非空格
還可以使用一些別的字符,例如:
var reg=/bc/ //表示字符bc
var reg=/[1-9]/? ? //表示數(shù)字1-9
var reg=/[a-z]/? ? //表示字母a-z
當(dāng)正則表達(dá)式是:var reg=/\d/
字符串是 var str="ab11a"
如果使用exec或match提取只可以提取到一個1,如何將兩個1都提取出來呢?
這里需要給正則表達(dá)式添加修飾符。
? var str="abd55sad448da";
//修飾符:{提取個數(shù)}
var reg=/\d{2}/? //表示提取兩位的任意數(shù)字
var res=str.match(reg)
? ? console.log(res)
? ? //返回 55? 可以一次提取兩個數(shù)字。
reg=/\d{n}/? 代表規(guī)則為 n個任意字符
reg=/\d{n,m}/ 代表最少n個字符,最多m個字符
reg=/\d{n,}/? 代表最少n個,最多不限
reg=/\d+/? 代表至少一位? 至多不限制
reg=/\d?/ 代表最多一位(0位可以匹配到),再多就匹配不到了
reg=/\d*/ 代表幾位都可以。
萬能匹配? .* 可以匹配到任意內(nèi)容