正則表達(dá)式基礎(chǔ)與常用驗(yàn)證表達(dá)式
一、正則元字符
是一些在正則表達(dá)式中有特殊用途、不代表它本身字符意義的一組字符。
1、 字符元字符
- […] :匹配列表中的任意字符
- [^…] :匹配不在列表中的任意字符
- . :匹配除了回車和換行符之外的任何字符
- \w :元符號(hào),相當(dāng)于[a-zA-Z0-9_],匹配任何字母、數(shù)字、下劃線字符,這樣的字符也稱為單詞字符
- \W :元符號(hào),相當(dāng)于[^a-zA-Z0-9_],匹配除了字母、數(shù)字、下劃線字符之外的任何字符
- \d :元符號(hào),相當(dāng)于[0-9],匹配任何單個(gè)的數(shù)字字符
- \D :元符號(hào),相當(dāng)于[^0-9],匹配除了數(shù)字之外的任何單個(gè)字符
- \s :元符號(hào),匹配空白字符,空白字符是指空格、Tab字符和回車換行符
- \S :元字符,匹配任何非空白字符
2、重復(fù)元字符(量詞)
- x? :匹配0個(gè)或1個(gè)x。
- x+ :匹配1個(gè)或多個(gè)x。
- x* :匹配0個(gè)或多個(gè)x。
- x{n} :匹配n個(gè)x。
- x{n,} :匹配n個(gè)或多個(gè)x。
- x{n,m} :匹配n到m個(gè)x。
3、定位元字符
- ^ :匹配必須出現(xiàn)在字符串的開頭或行的開頭(開頭)
- $ :匹配必須出現(xiàn)在以下位置:字符串結(jié)尾、字符串結(jié)尾處的 \n 之前或行的結(jié)尾。(結(jié)尾)
- \b :匹配單詞的開始或結(jié)束
- \B :匹配非單詞的開始或結(jié)束
- x(?=y) :正向肯定預(yù)查。只有在x后面跟上y時(shí),才匹配x成功。(正向等=)
- x(?!y) :正向否定預(yù)查。只有在x后面不跟著y時(shí),才匹配x成功。 (正向不等?。?/li>
- (?<=x)y:反向肯定預(yù)查。只有在y前面跟x時(shí),才匹配y 成功。Javascript不支持。(反向等,為在正向等前加<)
- (?<!x)y: 反向否定預(yù)查。只有在y前面不跟x時(shí),才匹配y 成功。Javascript不支持。(反向不等,為在正向等前加<)
4、分組和替換字符
- x|y :匹配x或y
- (sub) :反向引用,將子表達(dá)式sub作為一個(gè)整體處理,括號(hào)的作用相當(dāng)于代數(shù)中括號(hào)的作用。并將捕獲的子匹配保存在\1,\2,......和$1,$2,......中。例如:
/a(bc)+/
中,加號(hào)元字符作用在子表達(dá)式bc
上,它匹配abc、abcbc,但是不匹配a和ac - (?:sub) :分組子模式,但是不捕獲子模式。它的作用與(sub)類似,稱為無記憶匹配
- \1,\2,\3,... :在正則表達(dá)式中,分別包含與正則表達(dá)式中第一個(gè)反向引用、第二個(gè)反向引用、第三個(gè)反向引用...相匹配的子串
- $1,$2,$3,... :在替換中,分別包含與正則表達(dá)式中第一個(gè)反向引用、第二個(gè)反向引用。第三個(gè)反向引用...相匹配的子串
5、特殊字符
特殊字符是指那些不容易進(jìn)行直接書面表達(dá)或不容易直接使用鍵盤輸入的字符。
- \0 :匹配null字符,對(duì)應(yīng)的十六進(jìn)制值為\x00
- \b :匹配退格字符,對(duì)應(yīng)的十六進(jìn)制值為\x08
- \n :匹配換行字符,對(duì)應(yīng)的十六進(jìn)制值為\x0A
- \r :匹配回車字符,對(duì)應(yīng)的十六進(jìn)制值為\x0D
- \f :匹配換頁(yè)字符,對(duì)應(yīng)的十六進(jìn)制值為\x0C
- \t :匹配制表(TAB)字符,同時(shí)對(duì)應(yīng)于水平制表符\x09和垂直制表符\x0B
- \xhh :匹配用2個(gè)十六進(jìn)制數(shù)字表示的字符
- \uhhhh :匹配用4個(gè)十六進(jìn)制在數(shù)字表示的字符,這些字符是Unicode字符。[\u4e00-\u9fa5] 匹配任意一個(gè)漢字
- \cchar :匹配命名的控制字符
6、需要轉(zhuǎn)義的字符
. * + ( ) $ / \ ? [ ] ^ { } - ! < >
7、貪婪與非貪婪匹配
- 貪婪匹配:正則表達(dá)式一般趨向于最大長(zhǎng)度匹配,也就是所謂的貪婪匹配。
如使用模式 "ab.*c" 匹配字符串"abcaxc";,結(jié)果就是匹配到:abcaxc。 - 非貪婪匹配:就是匹配到結(jié)果就好,就少的匹配字符。
如使用模式 "ab.*?c" 匹配字符串"abcaxc",結(jié)果就是匹配到:abc。
默認(rèn)是貪婪模式;在量詞后面直接加上一個(gè)問號(hào)?就是非貪婪模式。如:*?
8、常見正則表達(dá)式
[1-9]?[0-9]|100 :匹配0-100的數(shù)字
\n[\s| ]*\r :匹配空行的正則表達(dá)式
二、正則表達(dá)式應(yīng)用舉例
1、驗(yàn)證表達(dá)式
只能輸入數(shù)字:"^[0-9]*$"。
只能輸入n位的數(shù)字:"^\d{n}$"。
只能輸入至少n位的數(shù)字:"^\d{n,}$"。
只能輸入m~n位的數(shù)字:。"^\d{m,n}$"
只能輸入零和非零開頭的數(shù)字:"^(0|[1-9][0-9]*)$"。
只能輸入有兩位小數(shù)的正實(shí)數(shù):"^[0-9]+(.[0-9]{2})?$"。
只能輸入有1~3位小數(shù)的正實(shí)數(shù):"^[0-9]+(.[0-9]{1,3})?$"。
只能輸入非零的正整數(shù):"^\+?[1-9][0-9]*$"。
只能輸入非零的負(fù)整數(shù):"^\-[1-9][]0-9"*$。
只能輸入長(zhǎng)度為3的字符:"^.{3}$"。
只能輸入由26個(gè)英文字母組成的字符串:"^[A-Za-z]+$"。
只能輸入由26個(gè)大寫英文字母組成的字符串:"^[A-Z]+$"。
只能輸入由26個(gè)小寫英文字母組成的字符串:"^[a-z]+$"。
只能輸入由數(shù)字和26個(gè)英文字母組成的字符串:"^[A-Za-z0-9]+$"?;?hellip;^[\W]$
只能輸入由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串:"^\w+$"。
驗(yàn)證用戶密碼:"^[a-zA-Z]\w{5,17}$" 正確格式為:以字母開頭,長(zhǎng)度在6~18之間,只能包含字符、數(shù)字和下劃線。
驗(yàn)證是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
只能輸入中文漢字:"^[\u4e00-\u9fa5]{0,}$"
驗(yàn)證Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
驗(yàn)證InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
驗(yàn)證電話號(hào)碼:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$" 正確格式為:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
驗(yàn)證身份證號(hào)(15位或18位數(shù)字):"^\d{15}|\d{18}$"。
驗(yàn)證一年的12個(gè)月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"1"~"12"。
驗(yàn)證一個(gè)月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"和"1"~"31"。
驗(yàn)證全角字符: “^\uFF00-\uFFFF”
匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff]
匹配空行的正則表達(dá)式:\n[\s| ]*\r
匹配HTML標(biāo)記的正則表達(dá)式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正則表達(dá)式:(^\s*)|(\s*$)
匹配IP地址的正則表達(dá)式: (\d+)\.(\d+)\.(\d+)\.(\d+)
vs中批量操作
(按ctrl+H 選上正則表達(dá)式)
- 刪除注釋 ://.* 替換為空。
- 刪除空行:^\s*\n 替換成空。
三、文件夾中的文件內(nèi)容正則批量替換
1、使用VSCode文件替換(使用JS引擎)
在VSCode中,使用正則表達(dá)式,將網(wǎng)頁(yè)中的font元素批量更換成font元素
<font (.*?")>((\n|.)*?)</font>
替換成:
<span $1>$2</span>
2、文件夾中的文件內(nèi)容正則批量替換
下載小工具:ReplaceAll
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
一個(gè)好用的正則匹配電話號(hào)手機(jī)號(hào)郵箱網(wǎng)址的方法
找到一個(gè)好用的正則匹配電話和手機(jī)號(hào)的方法,感謝,在這里分享一下2014-05-05javascript用正則表達(dá)式把1234567890替換為abcdefghij
javascript用正則表達(dá)式把1234567890替換為abcdefghij...2007-06-06webregexp 正則測(cè)試實(shí)現(xiàn)代碼
WebRegExp 1.0 - 客服果果 [ 無憂版 ]對(duì)于想學(xué)習(xí)正則的朋友是個(gè)不錯(cuò)的在線工具,測(cè)試你正則的正確性。2009-03-03javascript之正則表達(dá)式基礎(chǔ)知識(shí)小結(jié)
javascript之正則表達(dá)式基礎(chǔ)知識(shí)小結(jié),對(duì)于學(xué)習(xí)正則表達(dá)式的朋友是個(gè)不錯(cuò)的基礎(chǔ)入門資料。2010-04-04