摘要:于是對應(yīng)著,對應(yīng)著輸出月日年九前瞻正則表達(dá)式從文本頭部想穩(wěn)步開始解析,文本尾部方向,稱為前。只是條件不參與匹配找英文數(shù)字下劃線而且后面跟著數(shù)字的。
基礎(chǔ)知識(shí)
一 元字符
單詞邊界 d 數(shù)字 [0-9] w 英文 數(shù)字 下劃線 [a-z0-9_] s 空白字符[ v f] 水平制表符,v垂直制表符, 換行符, 回車符,f換頁符 反義 B 非單詞邊界 D [^0-9] W [^a-z0-9_] S 非空白字符 [^ v f] . 任意字符 少用 .* 任意數(shù)量的不包含換行的字符 貪婪匹配 .? 懶惰 非貪婪匹配 u4e00-u9fa5 中文
二 量詞
{m,n} 匹配m-n次,優(yōu)先匹配m次 {n,} 匹配n或以上次 {n} 匹配n次 ? 0或1,有或無 等于{0,1} + 1或以上等于{1,} * 0或n都可以 任意 等于{0,} eg: /d?/ //匹配1或0個(gè)數(shù)字 /d{2,4}/ //匹配2到4個(gè)數(shù)字 /s+javas+/ //匹配有1個(gè)或多個(gè)空格的字符串java /[^(]*/ //匹配1個(gè)或多個(gè)左括號(hào)
三 集合 字符類
[abc] 匹配a/b/c任意字符 [^abc] 匹配除了abc外的任意字符 [a-z] 匹配a到z任意字符 //注意:里面的-代表的是范圍 例如 "ahd-fj-k".replace(/[a-z]/g,"A") //輸出 》AAA-AA-A //如果我想把斜杠也替換了呢 有兩個(gè)方法 1. 利用轉(zhuǎn)義符 "ahd-fj-k".replace(/[a-z-]/g,"B") //輸出BBBBBBBB 2. 后面加多一個(gè)- "ahd-fj-k".replace(/[a-z-]/g,"B") //輸出BBBBBBBB //() 在集合里面默認(rèn)被轉(zhuǎn)義了 like this //"(122)do(".replace(/[(d)]/g,"A") 輸出 AAAAAdoA //具體被轉(zhuǎn)義范圍不確定 歡迎普及補(bǔ)充
四 分支
123|34|567 //匹配123或34或567
五 邊界 開始結(jié)束
^ //代表開始 在[]代表非 $ //代表結(jié)束
六 修飾符
g //全局匹配 不寫的話匹配完第一個(gè)就停止 i //忽略大小寫 m //忽略換行 //上面3可疊加使用
七 貪婪模式和非貪婪模式
js默認(rèn)貪婪模式 即最大可能的匹配
想要改成非貪婪模式在后面加個(gè)?
例子: "123456789".replace(/d{3,6}/,"XX") //輸出XX //貪婪模式先匹配了最多的 6個(gè)數(shù)字》X 剩下3個(gè)數(shù)字也算是符合就再多一個(gè)X "123456789".replace(/d{3,6}?/,"XX") //輸出XXX //非貪婪模式 優(yōu)先匹配了最低要求的3個(gè)數(shù)字一次 〉 3個(gè)X
八 分組與引用與捕獲
分組是正則中非常強(qiáng)大的功能 可以讓上面提到的量詞作用與一組字符。
語法 圓括號(hào)包裹(*);
/([0-9])[a-z]+1{3}/.test("2aa222") //true /([0-9]+)[a-z]+1/.test("12aa12") //true /([0-9]+)[a-z]+1/.test("12aa13") //false //這里需要注意一個(gè)問題。分組"1"表示的并不是多個(gè)數(shù)字,而是和對應(yīng)分組一模一樣的數(shù)字 /<([a-z]+)>.*1>/.test("sdlksdjkssdkl") // true
并不是所有用()起來的就能被捕抓成為分組的。
下面就要說到 非捕抓分組可以提高性能和簡化邏輯
用法:
**(***) //識(shí)別成為可捕抓分組 (?:***) //識(shí)別成為非捕抓分組** 例子: 把a(bǔ)1b2c3d4里面的數(shù)字都+1 "a1b2c3d4".replace(/(d)/g,function($1){ return $1*1+1 }) //輸出 a2b3c4d5 把2015-12-25 格式成 12月25日2015年 "2015-12-25".replace(/(d{4})-(d{2})-(d{2})/g,"$2月$3日$1年") //輸出 12月25日2015年 非捕抓例子: "2015-12-25".replace(/(d{4})-(?:d{2})-(d{2})/g,"$2月$3日$1年") //第二個(gè)()里面有?: 所以它不被捕抓成分組。 于是$1對應(yīng)著2015, $2對應(yīng)著25 //輸出 25月$3日2015年
九 前瞻
正則表達(dá)式從文本頭部想穩(wěn)步開始解析,文本尾部方向,稱為“前”。
簡單理解為 從左到右
前瞻就是 向前檢查是否屬于斷言。
后顧/后瞻方向相反 但是javascript不支持后瞻。
正向前瞻 例子: "a2*3w4sb".replace(/w(?=d)/g,"X") //輸出X2*3X4sb //主角是w 只對它進(jìn)行匹配。 //(?=d)這個(gè)就是斷言 就是條件。只是條件不參與匹配 //找w (英文|數(shù)字|下劃線) 而且后面跟著d 數(shù)字的。 //所以符合的有 a2的a w4的w; 負(fù)向前瞻 例子: "a2*3w4sb".replace(/w(?!d)/g,"X") //輸出 aX*XwXX //主角是w 只對它進(jìn)行匹配。 //(?!d)這個(gè)就是斷言 就是條件。只是條件不參與匹配 //找w (英文|數(shù)字|下劃線) 而且后面不是d 數(shù)字的。 //所以符合的有 2*的2 3w的3 4s的4 sb的s b后面什么都沒跟所以符合;
Js風(fēng)格 調(diào)用RegExp對象的構(gòu)造函數(shù) var reg = new RegExp("^[a-z]+[0-9]$", "gi") Perl風(fēng)格 寫在斜杠中 var reg = /^[a-z]+[0-9]$/gi
常用
test 返回布爾值
例子: /^d+$/.test("12637") //true /^d+$/.test("sdk") //false
search 返回搜索到的對應(yīng)位置 沒有則-1
//注意 search只查找一次,即使設(shè)置了g。重復(fù)調(diào)用也是從起始位置開始
例子 "ad1cd2c".search(/d/g) //2 第一個(gè)數(shù)字的位置 "adcd".search(/d/g) //-1 找不到
replace 替換
("a1b2c3").replace(/d/g,"數(shù)字") //a數(shù)字b數(shù)字c數(shù)字
split 分割成數(shù)組 里面也能寫正則。 如果找不到匹配分割的把自己變數(shù)組
"a12b23c34".split("1") //["a", "2b23c34"] "a12b23c34".split(/d{2}/g) //["a", "b", "c", ""] "a12b23c34".split(/[23]/g) //["a1", "b", "", "c", "4"] "a12b23c34".split(/[55]/g) //["a12b23c34"]
match 與 exec 返回?cái)?shù)組 匹配到的字符串
兩者相似又不同。 寫法上不一樣
match是字符串方法,寫法為:str.match(reg)
exec是正則表達(dá)式方法,寫法為:reg.exec(str)
寫法: var reg = new RegExp("abc") ; var str = "3abc4,5abc6"; str.match(reg); var reg = new RegExp("abc") ; var str = "3abc4,5abc6"; reg.exec(str ); --------------------------------------- 無子表達(dá)式非全局時(shí): **exec和match執(zhí)行的結(jié)果是一樣,均返回第一個(gè)匹配的字符串內(nèi)容;** var reg = new RegExp("[a-z]+") ; var str = "1abc2,3abc4"; alert(str.match(reg)); alert(reg.exec(str)); //都是輸出 abc 無子表達(dá)式全局匹配 : **match執(zhí)行了全局匹配查詢;exec找到一個(gè)匹配即返回。** var reg = new RegExp("[a-z]+","g") ; var str = "1abc2,3bcd4"; console.log(str.match(reg)); //["abc", "bcd"] console.log(str.match(reg)); //["abc", "bcd"] console.log(reg.exec(str)); //["abc"] console.log(reg.exec(str)); //["bcd"] //match執(zhí)行了全局匹配查詢;而exec逐次返回。 有子表達(dá)式 非全局: **match exec 都是返回結(jié)果 和分組** var reg = new RegExp("a(bc)") ; var str = "3abc4,5abc6"; console.log(str.match(reg)); //["abc", "bc"] console.log(reg.exec(str)); //["abc", "bc"] 有子表達(dá)式 全局: **match忽略子表達(dá)式,只查找全匹配正則表達(dá)式并返回所有內(nèi)容; exec 依然逐次返回結(jié)果 分組 ** var reg = new RegExp("a(bc)","g") ; var str = "3abc4,5abc6"; console.log(str.match(reg)); //?["abc", "abc"] console.log(str.match(reg)); //?["abc", "abc"] console.log(reg.exec(str)); //?["abc", "bc", index: 1] console.log(reg.exec(str)); //?["abc", "bc", index: 7]
/^d+$/.test("2l") //只能輸入數(shù)字 /^d{n}$/.test("2222") //只能輸入n個(gè)數(shù)字 /^d{n,}$/.test("22222") //只能輸入n個(gè)以上數(shù)字 /^d{m,n}$/.test("22222") //只能輸入m到n個(gè)數(shù)字 /^[a-z]+$/i //只能輸入英文 /^[A-Z]+$/.test("SS’) //只能輸入大寫英文 /^[0-9a-z]+$/i.test("1223ddsSSk") //只能輸入英文和數(shù)字 /^w+$/.test("wS233_") //只能英文數(shù)字下劃線 /^[u4e00-u9fa5]+$/.test("大家看") //純中文 //匹配手機(jī)號(hào) : 手機(jī)號(hào) 1開頭 34568 第二位 數(shù)字任意9位 /^1[3|4|5|6|8]{1}d{9}$/.test("13347834892") //匹配日期格式 YYYY-MM-DD 1/2開頭 3個(gè)數(shù)字 - [0|1][1-9] - [0-1][1-9] /^[1-9]d{3}-[0-1]d-[0-3]d$/.test("2017-12-20") //過濾html標(biāo)簽: 以<開頭 >結(jié)尾的標(biāo)簽 "幕中閃著兇光。
索拉卡".replace(/<[^<>]+>/g,"") //簡單版匹配email郵箱:英文數(shù)字下劃線 @ 英文數(shù)字 .com /^w+@[a-z0-9]+(.com)$/.test("@qq.com") // 網(wǎng)上看到的Email地址: ^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
有很多在線正則可視化的網(wǎng)站也是很有意思 寫了可以拷貝進(jìn)去檢查看看。
點(diǎn)擊跳轉(zhuǎn)去正則可視化網(wǎng)頁
mark一下 僅供參考 歡迎更正補(bǔ)充 end
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/54908.html
摘要:于是對應(yīng)著,對應(yīng)著輸出月日年九前瞻正則表達(dá)式從文本頭部想穩(wěn)步開始解析,文本尾部方向,稱為前。只是條件不參與匹配找英文數(shù)字下劃線而且后面跟著數(shù)字的。 基礎(chǔ)知識(shí) 一 元字符 單詞邊界 d 數(shù)字 [0-9] w 英文 數(shù)字 下劃線 [a-z0-9_] s 空白字符[ v f] 水平制表符,v垂直制表符, 換行符, 回車符,f換頁符 反義 B 非單詞邊界 D [^0-9] W [^...
摘要:本文內(nèi)容共正則表達(dá)式火拼系列正則表達(dá)式回溯法原理學(xué)習(xí)正則表達(dá)式,是需要懂點(diǎn)兒匹配原理的。正則表達(dá)式迷你書問世了讓幫你生成和解析參數(shù)字符串最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對字符串執(zhí)行模式匹配。 JS 的正則表達(dá)式 正則表達(dá)式 一種幾乎可以在所有的程序設(shè)計(jì)語言里和所有的計(jì)算機(jī)平臺(tái)上使用的文字處理工具。它可以用來查找特定的信息(搜索),也可以用來查...
摘要:探索專為而設(shè)計(jì)的將探討進(jìn)行了何種改進(jìn),以及這些改進(jìn)背后的原因。關(guān)于最友好的文章進(jìn)階前言之前就寫過一篇關(guān)于最友好的文章反響很不錯(cuò),由于那篇文章的定位就是簡單友好,因此盡可能的摒棄復(fù)雜的概念,只抓住關(guān)鍵的東西來講,以保證大家都能看懂。 周月切換日歷 一個(gè)可以進(jìn)行周月切換的日歷,左右滑動(dòng)的切換月份,上下滑動(dòng)可以進(jìn)行周,月不同的視圖切換,可以進(jìn)行事件的標(biāo)記,以及節(jié)假日的顯示,功能豐富 Andr...
摘要:第二段代碼如下修改就可以了改這一行其實(shí)你的本質(zhì)問題就在于誤認(rèn)為是數(shù)組對象,然而它是構(gòu)造函數(shù)。它繼承自構(gòu)造函數(shù)被執(zhí)行。故視為兩個(gè)字符串的拼接,結(jié)果為字符串,其長度為。 1.[] 和 Array 調(diào)用 slice 方法引起的問題 問題表示:在某些場景下,需要將函數(shù)的 arguments 參數(shù)作為一個(gè)數(shù)組調(diào)用,但是 arguments 是一個(gè)奇異對象,所以試著將 arguments 轉(zhuǎn)化為一...
閱讀 3948·2021-09-22 10:02
閱讀 3372·2019-08-30 15:52
閱讀 3067·2019-08-30 12:51
閱讀 763·2019-08-30 11:08
閱讀 2070·2019-08-29 15:18
閱讀 3110·2019-08-29 12:13
閱讀 3601·2019-08-29 11:29
閱讀 1877·2019-08-29 11:13