js匹配是js中比較重要的一個概念,我們在工作中經(jīng)常用到,但是往往都是記得不是很清楚,或者有些遺忘,這次記錄總結(jié)一下,讓自己加深一下印象,同時也會小伙伴們提供查閱資料的地方
創(chuàng)新互聯(lián)公司專注于昌邑網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供昌邑營銷型網(wǎng)站建設(shè),昌邑網(wǎng)站制作、昌邑網(wǎng)頁設(shè)計、昌邑網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造昌邑網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供昌邑網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
正則匹配模式分為兩種,一種是貪婪模式,另一種是非貪婪模式
貪婪模式:在遇到歧義時候盡可能的多的匹配符合的結(jié)果
非貪婪匹配:在遇到歧義時候匹配到一次符合的結(jié)果就不匹配了
js默認是貪婪匹配模式,貪婪模式變成非貪婪模式只需要在貪婪量詞({n, }, {n, m}, + , ?, *)后面加一個?就行了
附加: 正則匹配中?的幾種用法
正則匹配的前瞻就是給正則匹配的選項定義一個斷言,或者說是一個條件比如:我要匹配一個字母,但是我的需求是字母后面必須是跟著一個數(shù)字的情況,那么這種場景是怎么實現(xiàn)了,就是用到前瞻的概念,那么我想要他的前面也要是一個數(shù)字怎么辦了,這就是后顧。
前瞻后顧的描述
正則匹配新特性
以上的三個匹配形式都是不被捕獲的,其中前兩個是不匹配的,他只是用來當作條件來用,第三個是要被匹配的
1:任何元字符在沒有寫量詞的情況下,只匹配一次
2:寫了量詞,默認是貪婪匹配
3:正則匹配一旦全部找到就不會在繼續(xù)去匹配,除非你設(shè)置了全局g
4:正則匹配按照匹配規(guī)如果中間中斷沒有匹配到,并且字符串沒有匹配完,會繼續(xù)按照匹配規(guī)則重新匹配
5:(pattern)如果匹配到了很多結(jié)果,只捕獲最后一次匹配到的結(jié)果
6:任何量詞都只作用于前面的元字符
1:source 2:global 3:ingoreCase 4:multiline 5:lastIndex
字符串滿足正則匹配規(guī)則就會返回true,但是如果正則匹配里面含有全局的話,那么多運行幾遍會報錯,因為正則每次匹配開始都是看lastIndex的,全局情況下lastIndex每次執(zhí)行都會被改變
如果沒有找到任何匹配就返回null,如果找到了則返回一個數(shù)組,exec方法返回的數(shù)組的第 0 個元素是與正則表達式相匹配的文本
第 1 個元素是 正則匹配到 的第 1 個子表達式相匹配的文本(如果有的話)
第 2 個元素是正則匹配到 的第 2 個子表達式相匹配的文本(如果有的話)
...
以此類推。
其中還有三個參數(shù)
index:表示匹配到的文本的第一個字符所在的索引位置
input: 表示被匹配的文本
groups:表示有名的分組
在全局下也是一樣因為exec永遠只返回第一個匹配。
如果沒有找到任何匹配就返回null,如果找到了則返回一個數(shù)組,match方法返回的數(shù)組的第 0 個元素是與正則表達式相匹配的文本
第 1 個元素是 正則匹配到 的第 1 個子表達式相匹配的文本(如果有的話)
第 2 個元素是正則匹配到 的第 2 個子表達式相匹配的文本(如果有的話)
...
以此類推。
其中還有三個參數(shù)
index:表示匹配到的文本的第一個字符所在的索引位置
input: 表示被匹配的文本
groups:表示有名的分組
在非全局的情況下,這個方法和exec一模一樣,但是在全局的情況下,差別很大,在全局的情況下,只會返回匹配到的結(jié)果,并且lastIndex始終為0, 如果沒匹配到就返回null
該方法用來替換字符串,第一個參數(shù)是正則表達式,第二個參數(shù)可以是字符串也可以是函數(shù)
正則匹配測試工具
復制代碼
代碼如下:
var
str
=
"123#abc";
var
re
=
/abc/ig;
console.log(re.test(str));
//輸出ture
console.log(re.test(str));
//輸出false
console.log(re.test(str));
//輸出ture
console.log(re.test(str));
//輸出false
在創(chuàng)建正則表達式對象時如果使用了“g”標識符或者設(shè)置它了的global屬性值為ture時,那么新創(chuàng)建的正則表達式對象將使用模式對要將要匹配的字符串進行全局匹配。在全局匹配模式下可以對指定要查找的字符串執(zhí)行多次匹配。每次匹配使用當前正則對象的lastIndex屬性的值作為在目標字符串中開始查找的起始位置。lastIndex屬性的初始值為0,找到匹配的項后lastIndex的值被重置為匹配內(nèi)容的下一個字符在字符串中的位置索引,用來標識下次執(zhí)行匹配時開始查找的位置。如果找不到匹配的項lastIndex的值會被設(shè)置為0。當沒有設(shè)置正則對象的全局匹配標志時lastIndex屬性的值始終為0,每次執(zhí)行匹配僅查找字符串中第一個匹配的項??梢酝ㄏ旅娴拇a來查看在執(zhí)行匹配相應(yīng)的lastIndex
屬性的值。
復制代碼
代碼如下:
var
str
=
"123#abc";
var
re
=
/abc/ig;
console.log(re.test(str));
//輸出ture
console.log(re.lastIndex);
//輸出7
console.log(re.test(str));
//輸出false
console.log(re.lastIndex);
//輸出0
console.log(re.test(str));
//輸出ture
console.log(re.lastIndex);
//輸出7
console.log(re.test(str));
//輸出false
console.log(re.lastIndex);
//輸出0
關(guān)于RegExp.prototype.exec(str)方法和String.prototype.math(rgExp)方法
正則對象的test方法返回值為true或flase,在僅需要檢測目標字符串與指定模式是否匹配,但不需要獲取匹配內(nèi)容時這個方法非常有用。當需要獲取匹配結(jié)果時就需要用RegExp類型的exec(str)方法或String類型的match(rgExp)方法。
RegExp.prototype.exec(str)方法返回NULL或返會一個數(shù)組,在數(shù)組的第0個元素存放的是在字符串str中查找到的匹配內(nèi)容,1到n個元素返回的是在模式中使用括號"()"指定的子匹配項的內(nèi)容。
在沒有使用全局標志時String.prototype.math(rgExp)方法和RegExp.prototype.exec(str)的行為類似。當設(shè)置了全局匹配標志時String.prototype.math(rgExp)方法返回的數(shù)組項元素0到n中包含了所有匹配到的項不包含子匹配項。這時可以使用RegExp.$1..$9獲取9個子匹配。
匹配就是查找。。。
字符串有查找的方法,字符串有indexOf方法可以查找指定字符串出現(xiàn)的位置。
這實現(xiàn)的查找的功能太簡單。
比如字符串"abc123456def",你如何取出數(shù)字部分呢?
用字符串本身的查找功能就難以實現(xiàn)。
但用正則就很簡單,\d+
如:
SCRIPT?LANGUAGE="JavaScript"
!--
var?s?=?"abc123456def123";
var?re?=?/\d+/ig;
var?r?=?"";
while(r?=?re.exec(s))?{
alert(r[0]);
};
//--
/SCRIPT
有些查找功能可能用字符串拆分也可以實現(xiàn),但比較麻煩,但用正則就很簡單。
分享標題:匹配javascript,匹配的拼音
本文URL:http://aaarwkj.com/article44/dsspjee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、企業(yè)建站、網(wǎng)站維護、網(wǎng)站設(shè)計、品牌網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)