摘要:比如正則表示匹配這樣一個字符串第一個字符是,接下來是到個字符,最后是字符。其實現(xiàn)的方式是使用字符組。具體形式如下,其中和是子模式,用管道符分隔,表示其中任何之一。
貪婪模式:
在使用修飾匹配次數(shù)的特殊符號時,有幾種表示方法可以使同一個表達(dá)式能夠匹配不同的次數(shù),比如:"{m,n}", "{m,}", "?", "*", "+",具體匹配的次數(shù)隨被匹配的字符串而定。這種重復(fù)匹配不定次數(shù)的表達(dá)式在匹配過程中,總是盡可能多的匹配
非貪婪模式:在修飾匹配次數(shù)的特殊符號后再加上一個 "?" 號,則可以使匹配次數(shù)不定的表達(dá)式盡可能少的匹配,使可匹配可不匹配的表達(dá)式,盡可能的 "不匹配"。這種匹配原則叫作 "非貪婪" 模式,也叫作 "勉強" 模式。如果少匹配就會導(dǎo)致整個表達(dá)式匹配失敗的時候,與貪婪模式類似,非貪婪模式會最小限度的再匹配一些,以使整個表達(dá)式匹配成功。
var regex = /d{2,5}/g; var string = "123 1234 12345 123456"; console.log( string.match(regex) ); // => ["123", "1234", "12345", "12345"]
其中正則 /d{2,5}/,表示數(shù)字連續(xù)出現(xiàn) 2 到 5 次。會匹配 2 位、3 位、4 位、5 位連續(xù)數(shù)字。 但是其是貪婪的,它會盡可能多的匹配。你能給我 6 個,我就要 5 個。你能給我 3 個,我就要 3 個。 反正只要在能力范圍內(nèi),越多越好。
橫向模糊匹配橫向模糊指的是,一個正則可匹配的字符串的長度不是固定的,可以是多種情況的。 其實現(xiàn)的方式是使用量詞。譬如 {m,n},表示連續(xù)出現(xiàn)最少 m 次,最多 n 次。 比如正則 /ab{2,5}c/ 表示匹配這樣一個字符串:第一個字符是 "a",接下來是 2 到 5 個字符 "b",最后是字符 "c"。
var regex = /ab{2,5}c/g; var string = "abc abbc abbbc abbbbc abbbbbc abbbbbbc"; console.log( string.match(regex) ); // => ["abbc", "abbbc", "abbbbc", "abbbbbc"]縱向模糊匹配
縱向模糊指的是,一個正則匹配的字符串,具體到某一位字符時,它可以不是某個確定的字符,可以有多種 可能。 其實現(xiàn)的方式是使用字符組。
譬如 [abc],表示該字符是可以字符 "a"、"b"、"c" 中的任何一個。 比如 /a[123]b/ 可以匹配如下三種字符串: "a1b"、"a2b"、"a3b"。
var regex = /d{2,5}?/g; var string = "123 1234 12345 123456"; console.log( string.match(regex) ); // => ["12", "12", "34", "12", "34", "12", "34", "56"] 其中 /d{2,5}?/ 表示,雖然 2 到 5 次都行,當(dāng) 2 個就夠的時候,就不再往多選分支
一個模式可以實現(xiàn)橫向和縱向模糊匹配。而多選分支可以支持多個子模式任選其一。 具體形式如下:(p1|p2|p3),其中 p1、p2 和 p3 是子模式,用 |(管道符)分隔,表示其中任何之一。 例如要匹配字符串 "good" 和 "nice" 可以使用 /good|nice/。
var regex = /good|nice/g; var string = "good idea, nice try."; console.log( string.match(regex) ); // => ["good", "nice"]
但有個事實我們應(yīng)該注意,比如我用 /good|goodbye/,去匹配 "goodbye" 字符串時,結(jié)果是 "good"
var regex = /good|goodbye/g; var string = "goodbye"; console.log( string.match(regex) ); // => ["good"]
而把正則改成 /goodbye|good/,結(jié)果是:
var regex = /goodbye|good/g; var string = "goodbye"; console.log( string.match(regex) ); // => ["goodbye"]
也就是說,分支結(jié)構(gòu)也是惰性的,即當(dāng)前面的匹配上了,后面的就不再嘗試了。
反向引用比如要寫一個正則支持匹配如下三種格式
2016-06-12
2016/06/12
2016.06.12
var regex = /d{4}(-|/|.)d{2}(-|/|.)d{2}/; var string1 = "2017-06-12"; var string2 = "2017/06/12"; var string3 = "2017.06.12"; var string4 = "2016-06/12"; console.log( regex.test(string1) ); // true console.log( regex.test(string2) ); // true console.log( regex.test(string3) ); // true console.log( regex.test(string4) ); // true
其中 / 和 . 需要轉(zhuǎn)義。雖然匹配了要求的情況,但也匹配 "2016-06/12" 這樣的數(shù)據(jù)。
假設(shè)我們想要求分割符前后一致怎么辦?此時需要使用反向引用:
var regex = /d{4}(-|/|.)d{2}1d{2}/; var string1 = "2017-06-12"; var string2 = "2017/06/12"; var string3 = "2017.06.12"; var string4 = "2016-06/12"; console.log( regex.test(string1) ); // true console.log( regex.test(string2) ); // true console.log( regex.test(string3) ); // true console.log( regex.test(string4) ); // false
注意里面的 1,表示的引用之前的那個分組 (-|/|.)。不管它匹配到什么(比如 -),1 都匹配那個同 樣的具體某個字符。
我們知道了 1 的含義后,那么 2 和 3 的概念也就理解了,即分別指代第二個和第三個分組。
使用例子字符串 trim 方法模擬
function trim(str) { return str.replace(/^s+|s+$/g, ""); }
表示一個 16 進(jìn)制字符,可以用字符組 [0-9a-fA-F]。 其中字符可以出現(xiàn) 3 或 6 次,需要是用量詞和分支結(jié)構(gòu)。 使用分支結(jié)構(gòu)時,需要注意順序。 正則如下
var regex = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g; var string = "#ffbbad #Fc01DF #FFF #ffE"; console.log( string.match(regex) ); // => ["#ffbbad", "#Fc01DF", "#FFF", "#ffE"]
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/98531.html
摘要:使用看完你就會正則表達(dá)式了四種操作驗證切分提取替換第一章正則表達(dá)式字符匹配攻略正則表達(dá)式是匹配模式,要么匹配字符,要么匹配位置至少,至多匹配中的任一個字符范圍表示法如果要匹配則要么要么要么通配符,表示幾乎任意 API 使用 String#search String#split String#match String#replace RegExp#test Reg...
showImg(https://segmentfault.com/img/bVbfGSV?w=719&h=718); showImg(https://segmentfault.com/img/bVbfGTc?w=801&h=552); showImg(https://segmentfault.com/img/bVbfGTq?w=1017&h=501);
摘要:本文內(nèi)容共正則表達(dá)式火拼系列正則表達(dá)式回溯法原理學(xué)習(xí)正則表達(dá)式,是需要懂點兒匹配原理的。正則表達(dá)式迷你書問世了讓幫你生成和解析參數(shù)字符串最全正則表達(dá)式總結(jié)驗證號手機(jī)號中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對字符串執(zhí)行模式匹配。 JS 的正則表達(dá)式 正則表達(dá)式 一種幾乎可以在所有的程序設(shè)計語言里和所有的計算機(jī)平臺上使用的文字處理工具。它可以用來查找特定的信息(搜索),也可以用來查...
摘要:介紹這周開始學(xué)習(xí)老姚大佬的正則表達(dá)式迷你書,然后習(xí)慣性的看完一遍后,整理一下知識點,便于以后自己重新復(fù)習(xí)。感謝原書作者老姚,本文無意抄襲,只是作為自己知識點的整理,后續(xù)也會整理到自己的知識庫網(wǎng)站中。等價于,表示出現(xiàn)次。 showImg(https://segmentfault.com/img/remote/1460000018530584?w=919&h=449); 介紹 這周開始學(xué)習(xí)...
摘要:目前許多程序設(shè)計語言都支持利用正則表達(dá)式進(jìn)行字符串操作。本文中的正則表達(dá)式轉(zhuǎn)化為關(guān)系圖來展示的工具是此文主要參考和學(xué)習(xí)了老姚的正則表達(dá)式迷你書,內(nèi)容清晰明了,在此非常感謝老姚的精神,致敬。參考文獻(xiàn)老姚著正則表達(dá)式迷你書 sharplook作為專業(yè)的日志采集分析系統(tǒng),涉及的技術(shù)點,從后到前著實不少,內(nèi)容也較為復(fù)雜。正則作為日志解析的手段,起著舉足輕重的作用,在此小生將晦澀難懂的內(nèi)容,拆解...
閱讀 3631·2021-11-24 09:39
閱讀 2570·2021-11-15 11:37
閱讀 2226·2021-11-11 16:55
閱讀 5272·2021-10-14 09:43
閱讀 3718·2021-10-08 10:05
閱讀 3025·2021-09-13 10:26
閱讀 2340·2021-09-08 09:35
閱讀 3549·2019-08-30 15:55