摘要:正則表達(dá)式邊界及前瞻邊界整個(gè)字符串開(kāi)頭結(jié)尾單詞的邊界前瞻正向前瞻反向前瞻正則的對(duì)象屬性屬性描述對(duì)象是否具有標(biāo)志。正則表達(dá)式的源文本。支持正則表達(dá)式的對(duì)象的方法方法描述檢索與正則表達(dá)式相匹配的值。替換與正則表達(dá)式匹配的子串。
——————【 正則表達(dá)式 】——————
復(fù)習(xí)字符串操作
indexOf 查找字符 返回位置 charAt 查找位置 返回字符 substring 獲取字符竄 split 分割字符串
正則表達(dá)式的概念和寫法
【正則默認(rèn)】 :正則 :也叫做規(guī)則,讓計(jì)算機(jī)能夠讀懂人類的規(guī)則
正則都是操作字符串的。
正則的寫法:
var re = /a/; //和數(shù)組字符串區(qū)分開(kāi)來(lái)
var re = newRegExp("a");
1.正則中是區(qū)分大小寫的 不區(qū)分大小寫在正則后加 表示i (ignore) 如var re = newRegExp("a","i"); 2.正則匹配成功就會(huì)結(jié)束,不會(huì)繼續(xù)匹配, 如果想全部查找就要加 標(biāo)識(shí)g (global)
量詞:代表出現(xiàn)的次數(shù)
量詞 描述 n+ 匹配任何包含至少一個(gè) n 的字符串。 n* 匹配任何包含零個(gè)或多個(gè) n 的字符串。 n? 匹配任何包含零個(gè)或一個(gè) n 的字符串。 n{X} 匹配包含 X 個(gè) n 的序列的字符串。 n{X,Y} 匹配包含 X 至 Y 個(gè) n 的序列的字符串。 n{X,} 匹配包含至少 X 個(gè) n 的序列的字符串。 n$ 匹配任何結(jié)尾為 n 的字符串。 ^n 匹配任何開(kāi)頭為 n 的字符串。 ?=n 匹配任何其后緊接指定字符串 n 的字符串。 ?!n 匹配任何其后沒(méi)有緊接指定字符串 n 的字符串。
>{n,m}:至少出現(xiàn)n次,最多m次 >{n,} :至少n次 >* :任意次 相當(dāng)于{0,} ? :零次或一次 相當(dāng)于{0,1} + :一次或任意次相當(dāng)于 {1,} {n}: 正好n次
例子:判斷是不是QQ號(hào)
//^ : 放在正則的最開(kāi)始位置,就代表起始的意思,注意 /[^a] / 和 /^[a]/是不一樣的,前者是排除的意思,后者是代表首位。 //$ : 正則的最后位置 , 就代表結(jié)束的意思 //首先想QQ號(hào)的規(guī)則
1 首位不能是0 2 必須是 5-12位的數(shù)字
var aInput = document.getElementsByTagName("input"); var re = /^[1-9]d{4,11}$/; //123456abc為了防止出現(xiàn)這樣的情況,所以必須限制最后 //首位是0-9,接著是4-11位的數(shù)字類型。 aInput[1].onclick = function(){ if( re.test(aInput[0].value) ){ alert("是QQ號(hào)"); }else{ alert("不是QQ號(hào)"); } }; 例子:去掉前后空格(面試題經(jīng)常出現(xiàn)) var str = " hello "; alert( "("+trim(str)+")" );//為了看出區(qū)別所以加的括號(hào)。 (hello) function trim(str){ var re = /^s+|s+$/g; // |代表或者 s代表空格 +至少一個(gè) 前面有至少一個(gè)空格 或者后面有至少一個(gè)空格 且全局匹配 return str.replace(re,""); //把空格替換成空 }
貪婪模式與反貪婪模式
*、+和?限定符都是貪婪的,因?yàn)樗鼈儠?huì)盡可能多的匹配文字,只有在它們的后面加上一個(gè)?就可>以實(shí)現(xiàn)非貪婪或最小匹配。
var c="qqq icbkb coiwcnk tyu kjanc alnc" var reg =/w{4,7}/g console.log(c.match(reg))// ["icbkb", "coiwcnk", "kjanc", "alnc"] var reg =/w{4,7}?/g console.log(c.match(reg)) ["icbk", "coiw", "kjan", "alnc"]
正則表達(dá)式邊界及前瞻
邊界
整個(gè)字符串開(kāi)頭( ^ ) 結(jié)尾( $ )
單詞的邊界 (b), (B)
前瞻
正向前瞻 reg (? = assert)
反向前瞻 reg (?! = assert)
正則的對(duì)象屬性
屬性 描述
global RegExp 對(duì)象是否具有標(biāo)志 g。 ignoreCase RegExp 對(duì)象是否具有標(biāo)志 i。 lastIndex 一個(gè)整數(shù),標(biāo)示開(kāi)始下一次匹配的字符位置。 multiline RegExp 對(duì)象是否具有標(biāo)志 m。 source 正則表達(dá)式的源文本。
正則表達(dá)式的使用
RegExp 對(duì)象方法
方法 描述compile 編譯正則表達(dá)式。 exec 檢索字符串中指定的值。返回找到的值,并確定其位置。 test 檢索字符串中指定的值。返回 true 或 false。
支持正則表達(dá)式的 String 對(duì)象的方法
方法 描述search 檢索與正則表達(dá)式相匹配的值。 match 找到一個(gè)或多個(gè)正則表達(dá)式的匹配。 replace 替換與正則表達(dá)式匹配的子串。 split 把字符串分割為字符串?dāng)?shù)組。
test() :在字符串中查找符合正則的內(nèi)容,若查找到返回true,反之返回false.
用法正則.test(字符串)例子:判斷是否是數(shù)字
var str = "374829348791"; var re = /D/; // D代表非數(shù)字 if( re.test(str) ){ // 返回true,代表在字符串中找到了非數(shù)字。 alert("不全是數(shù)字"); }else{ alert("全是數(shù)字"); }
search() :在字符串搜索符合正則的內(nèi)容,搜索到就返回出現(xiàn)的位置(從0開(kāi)始,如果匹配的不只是一個(gè)字母,那只會(huì)返回第一個(gè)字母的位置), 如果搜索失敗就返回 -1
用法:字符串.search(正則)例子:在字符串中找字母b,且不區(qū)分大小寫
var str = "abcdef"; var re = /B/i; //var re = new RegExp("B","i"); 也可以這樣寫 alert( str.search(re) ); // 1
match() 在字符串中搜索復(fù)合規(guī)則的內(nèi)容,搜索成功就返回內(nèi)容,格式為數(shù)組,失敗就返回null。
用法: 字符串.match(正則)例子:找出指定格式的所有數(shù)字,如下找到 123,54,33,879
var str = "haj123sdk54hask33dkhalsd879"; var re = /d+/g; // 每次匹配至少一個(gè)數(shù)字 且全局匹配 如果不是全局匹配,當(dāng)找到數(shù)字123,它就會(huì)停止了。 就只會(huì)彈出123.加上全局匹配,就會(huì)從開(kāi)始到結(jié)束一直去搜索符合規(guī)則的。 如果沒(méi)有加號(hào),匹配的結(jié)果就是1,2,3,5,4,3,3,879并不是我們想要的,有了加號(hào),每次匹配的數(shù)字就是至少一個(gè)了。 alert( str.match(re) ); // [123,54,33,879]
replace() :查找符合正則的字符串,就替換成對(duì)應(yīng)的字符串。返回替換后的內(nèi)容。
用法: 字符串.replace(正則,新的字符串/回調(diào)函數(shù))(在回調(diào)函數(shù)中,第一個(gè)參數(shù)指的是每次匹配成功的字符) | : 或的意思 。例子:敏感詞過(guò)濾,比如 >我愛(ài)北京天安門,天安門上太陽(yáng)升。------我愛(ài)*,上太陽(yáng)升。即北京和天安門變成*號(hào),
一開(kāi)始我們可能會(huì)想到這樣的方法:
var str = "我愛(ài)北京天安門,天安門上太陽(yáng)升。"; var re = /北京|天安門/g; // 找到北京 或者天安門 全局匹配 var str2 = str.replace(re,"*"); alert(str2) //我愛(ài)**,*上太陽(yáng)升 //這種只是把找到的變成了一個(gè)*,并不能幾個(gè)字就對(duì)應(yīng)幾個(gè)*。
要想實(shí)現(xiàn)幾個(gè)字對(duì)應(yīng)幾個(gè)*,我們可以用回調(diào)函數(shù)實(shí)現(xiàn):
var str = "我愛(ài)北京天安門,天安門上太陽(yáng)升。"; var re = /北京|天安門/g; // 找到北京 或者天安門 全局匹配 var str2 = str.replace(re,function(str){ alert(str); //用來(lái)測(cè)試:函數(shù)的第一個(gè)參數(shù)代表每次搜索到的符合正則的字符,所以第一次str指的是北京 第二次str是天安門 第三次str是天安門 var result = ""; for(var i=0;i():,小括號(hào),叫做分組符。就相當(dāng)于數(shù)學(xué)里面的括號(hào)。如下:
var str = "2013-6-7"; var re1 = /d-+/g; // 全局匹配數(shù)字,橫杠,橫杠數(shù)量至少為1,匹配結(jié)果為: 3- 6- var re1 = /(d-)+/g; // 全局匹配數(shù)字,橫杠,數(shù)字和橫杠整體數(shù)量至少為1 3-6- var re2 = /(d+)(-)/g; // 全局匹配至少一個(gè)數(shù)字,匹配一個(gè)橫杠 匹配結(jié)果:2013- 6-[] : 表示某個(gè)集合中的任意一個(gè),比如 [abc] 整體代表一個(gè)字符 匹配 a b c 中的任意一個(gè),也可以是范圍,[0-9] 范圍必須從小到大 。
1 整體代表一個(gè)字符 :^寫在[]里面的話,就代表排除的意思例子:匹配HTML標(biāo)簽 比如
hahahah找出標(biāo)簽var re = /<2+>/g; //匹配左括號(hào)
中間至少一個(gè)非右括號(hào)的內(nèi)容(因?yàn)闃?biāo)簽里面還有屬性等一些東西),然后匹配右括號(hào)
var re = /<[wW]+>/g; //匹配左括號(hào) 中間至少一個(gè)字符或者非字符的內(nèi)容,然后匹配右括號(hào)//
其實(shí)就是找到左括號(hào),然后中間可以有至少一個(gè)內(nèi)容,一直到找到右括號(hào)就代表是一個(gè)標(biāo)簽。
概念理解
正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這>>些特定字符>的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來(lái)表達(dá)對(duì)字符串的一>>種過(guò)濾邏輯。
給定一個(gè)正則表達(dá)式和另一個(gè)字符串,我們可以達(dá)到如下的目的:給定的字符串是否符合正則表達(dá)式的過(guò)濾邏輯(稱作“匹配”);
可以通過(guò)正則表達(dá)式,從字符串中獲取我們想要的特定部分。
正則表達(dá)式的特點(diǎn)是:
靈活性、邏輯性和功能性非常強(qiáng);
可以迅速地用極簡(jiǎn)單的方式達(dá)到字符串的復(fù)雜控制。
a ?
> ?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/84927.html
摘要:本文內(nèi)容共正則表達(dá)式火拼系列正則表達(dá)式回溯法原理學(xué)習(xí)正則表達(dá)式,是需要懂點(diǎn)兒匹配原理的。正則表達(dá)式迷你書問(wèn)世了讓幫你生成和解析參數(shù)字符串最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對(duì)字符串執(zhí)行模式匹配。 JS 的正則表達(dá)式 正則表達(dá)式 一種幾乎可以在所有的程序設(shè)計(jì)語(yǔ)言里和所有的計(jì)算機(jī)平臺(tái)上使用的文字處理工具。它可以用來(lái)查找特定的信息(搜索),也可以用來(lái)查...
摘要:構(gòu)造函數(shù)可以有兩個(gè)字符串參數(shù),第一個(gè)參數(shù)包含正則表達(dá)式的主體部分。只讀的布爾值,說(shuō)明這個(gè)正則表達(dá)式是否帶有修飾符。中正則的擴(kuò)展構(gòu)造函數(shù)在中,只能接受字符串作為參數(shù),允許其直接接受正則表達(dá)式作為參數(shù)。 上文傳送門:初探正則表達(dá)式 正則表達(dá)式是一個(gè)描述字符模式的對(duì)象,JavaScript 的 RegExp 類表示正則表達(dá)式,String 和 RegExp 都定義了方法,后者使用正則表達(dá)式進(jìn)...
摘要:正則表達(dá)式一直是里比較難以掌握的點(diǎn)。在中創(chuàng)建正則的兩種方式使用字面量這就是正則表達(dá)式的字面量語(yǔ)法,表示正則表達(dá)式的模式,為正則表達(dá)式的標(biāo)志。字面量形式的正則表達(dá)式一般使用較多,也推薦大家盡可能使用這種形式,簡(jiǎn)潔易讀,符合正常的使用習(xí)慣。 正則表達(dá)式一直是js里比較難以掌握的點(diǎn)。 看不懂,學(xué)不會(huì),記不住。 每次需要用到正則的時(shí)候,都需要再去查找資料。 今天花時(shí)間把正則的知識(shí)點(diǎn)總結(jié)下,希望...
摘要:注意本文將正則與中的正則分開(kāi)討論。正則零寬斷言更多參考各種語(yǔ)言對(duì)于正則不同支持參考單行模式與多行模式通過(guò)設(shè)置正則表達(dá)式后的修飾符可開(kāi)啟對(duì)應(yīng)的匹配模式單行模式和多行模式。 最近這段時(shí)間幫同學(xué)處理一些文檔, 涉及到一些結(jié)構(gòu)化文檔的工作大部分都得使用正則表達(dá)式, 之前對(duì)于正則的認(rèn)識(shí)大多來(lái)源于語(yǔ)言書上那幾頁(yè)的介紹, 自己也沒(méi)有用過(guò)幾次。這里將我之前感到模糊的概念作個(gè)整理。因?yàn)閷?duì)JS了解多點(diǎn),所...
摘要:選擇分組和引用正則表達(dá)式的語(yǔ)法還包括指定選擇項(xiàng)子表達(dá)式分組和引用前一子表達(dá)式的特殊字符。帶圓括號(hào)的表達(dá)式的另一個(gè)用途是允許在同一正則表達(dá)式的后部引用前面的子表達(dá)式。 正則表達(dá)式(regular expression)是一個(gè)描述字符模式的對(duì)象。JavaScript的 RegExp類 表示正則表達(dá)式,String和RegExp都定義了方法,后者使用正則表達(dá)式進(jìn) 行強(qiáng)大的模式匹配和文本檢索與...
摘要:最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對(duì)字符串執(zhí)行模式匹配。學(xué)習(xí)目標(biāo)了解正則表達(dá)式語(yǔ)法在中使用正則表達(dá)式在中使 JS高級(jí)技巧 本篇是看的《JS高級(jí)程序設(shè)計(jì)》第23章《高級(jí)技巧》做的讀書分享。本篇按照書里的思路根據(jù)自己的理解和經(jīng)驗(yàn),進(jìn)行擴(kuò)展延伸,同時(shí)指出書里的一些問(wèn)題。將會(huì)討論安全的類型檢測(cè)、惰性載入函數(shù)、凍結(jié)對(duì)象、定時(shí)器等話題。1. 安全的類型檢測(cè)...
閱讀 1683·2021-11-02 14:48
閱讀 3791·2019-08-30 15:56
閱讀 2848·2019-08-30 15:53
閱讀 3285·2019-08-30 14:09
閱讀 3199·2019-08-30 12:59
閱讀 2932·2019-08-29 18:38
閱讀 2783·2019-08-26 11:41
閱讀 2356·2019-08-23 16:45