前言
? ? 雖然工作四五年了缘琅,都沒怎么使用過正則绳泉,但是它一直都是我心中的一個痛,尤其是我月初手寫webpack-loader完成項目需求時,使用了大量的字符串的find诗茎、replace等操作弯屈,這讓我再一次存在這樣的疑問:如果是正則蜗帜,會不會更好?
元字符
? ??^资厉、$厅缺、.、*、+湘捎、?诀豁、|、\窥妇、/舷胜、(、)活翩、[烹骨、]、{材泄、}沮焕、=、!拉宗、:峦树、-
橫向匹配與縱向匹配
? ? 橫向匹配
? ? ? ? 一般字符值是確定的,但是該字符出現(xiàn)的個數(shù)不確定旦事,比如ab魁巩、abb、abbb姐浮、abbb...b中歪赢,b出現(xiàn)的次數(shù)不確定
? ? ? ? 代表字符:
? ? ? ? ? ? {}:具體指定出現(xiàn)次數(shù)
? ? ? ? ? ? ?:0|1次
? ? ? ? ? ? +:>=1次
? ? ? ? ? ? *:>=0次
? ??縱向匹配
? ? ? ? 一般針對某一個字符做限定,如ab单料、ac埋凯、ad、af中扫尖,b的值不確定
? ? ? ? 代表字符:
? ? ? ? ? ? .:通配符白对,表任意字符
? ? ? ? ? ? -:范圍
? ? ? ? ? ? []:具體指定可選值
? ? ? ? ? ? ^:排除(僅用在[]時)
? ? ? ? ? ? \d:數(shù)字
? ? ? ? ? ? \w:數(shù)字|字母|下劃線
? ? ? ? ? ? \s:空白符,如空格换怖、水平制表符甩恼、垂直制表符、換行符沉颂、回車符条摸、換頁符等
? ? ? ? ? ? \D|\W|\S:上述小寫取反
貪婪與惰性
? ? 貪婪
? ? ? ? 按最大范圍匹配
? ? 惰性
? ? ? ? 按最小范圍匹配,使用铸屉?標識
分支
? ? 標識符
????????|
? ? ? ? 一般與()搭配使用
修飾符
? ? g:后一次匹配從上一次匹配成功的下一個位置開始
? ? m:多行匹配
? ? i:忽略大小寫
優(yōu)先級
? ? \?()或[]??{}或*或钉蒲?或+??^或$或字符字面量??|
示例
? ??取任意字符
? ? ? ? [^]
? ??取除了abc外的
? ? ? ? [-ac]
? ??匹配十六進制顏色值
? ? ? ? 分析:
? ? ? ? ? ? 十六進制以“#”開頭,但是并不能使用^,因為這代表整個字符的開頭
? ? ? ? ? ? 除了#外彻坛,其余字符為數(shù)字和字母顷啼,但是下劃線不行踏枣,故為[\da-fA-F],且需要使用()與#隔開
? ? ? ? ? ? 顏色值可以是3位也可以是6位钙蒙,故需要使用分支:|? ? ?
? ? ????結(jié)果:
? ??配送時間--24小時制
? ? ? ? 分析:
? ? ? ? ? ? 若時的十位為2時茵瀑,時的個位只能為0、1躬厌、2马昨、3
? ? ? ? ? ? 分的十位最高取到6
? ? ? ? ? ? 涉及兩種情況,需要使用|+()
? ? ????結(jié)果:
? ??匹配日期
? ? ? ? 分析:
? ? ? ? ? ? 和時間一樣扛施,主要分析出分支
? ? ? ? ? ? [0-38]代表的是0偏陪、1、2煮嫌、3和8,而不是0到38
? ? ????結(jié)果:
? ??匹配文件路徑
? ? ? ? 分析:
? ? ? ? ? ? 盤符可以是任意的大小寫字母抱虐,對于冒號而言昌阿,我不確定需不需要轉(zhuǎn)譯,那就轉(zhuǎn)譯準沒錯
? ? ? ? ? ? 剩下的文件夾恳邀,分兩種情況:
? ? ? ? ? ? ? ? 如果是最后一個懦冰,則沒有\(zhòng),且要么有要么沒有
? ? ? ? ? ? ? ? 如果不是最后一個谣沸,則一定有\(zhòng)刷钢,且為0或多個
? ? ? ? ? ? ? ? 雖說是兩種情況,但這里并不是分支的概念
? ? ????結(jié)果:
? ??匹配id
? ? ? ? 分析:
? ? ? ? ? ? 使用.可以匹配任意字符乳附,為空的不要内地,故為.+
? ? ? ? ? ? 但是.也會匹配引號,故想要進行貪婪赋除,匹配到右引號即停止
? ? ? ? ? ? ?是對匹配結(jié)果進行貪婪阱缓,而非前一個,如.+?“標識對任意字符匹配到問號為止举农,而不是對+
? ? ? ? ?結(jié)果: