正則表達(dá)式是項(xiàng)目開發(fā)中常用的模式,內(nèi)容替換扒吁、表單認(rèn)證稳摄、網(wǎng)絡(luò)爬蟲等,通過以下的例子我相信可以大概掌握正則表達(dá)式了
定義字符集 []
[a-e]表示a到e這些字符中的某一個(gè)字符
[a-z]26個(gè)字母之一
[aeiou]表示aeiou這5個(gè)字符其中的某一個(gè)字符
[a-zA-Z]表示大寫泼橘、小寫字母中的某一個(gè)字符
[a-zA-Z0-9_-]表示大寫涝动、小寫字母、0-9炬灭、_醋粟、-中的某一個(gè)字符
[0-9]表示0到9之間的任意一個(gè)數(shù)字
-
[9-3] [z-a]不能從大往小寫,有語法錯(cuò)誤
<script type="text/javascript"> //定義字符集 //在沒有特殊限制的時(shí)候就是“單次”匹配 //從左往右匹配到第一符合模式的內(nèi)容即可 var str = "2015-09-12 is a SunShine Day"; var reg = /[a-z]/; //["i"] var reg = /[M-W]/; //["S"] var reg = /[uxpq]/; //["u"] var reg = /[0-9]/; //["2"] var reg = /[a-z_-]/; //["-"] var rst = str.match(reg); console.log(rst); </script>
特別字符集
$:匹配輸入字符串的結(jié)尾位置
^(托字符):表示字符串的開始位置重归,或者表示非
():標(biāo)記一個(gè)字表達(dá)式的開始和結(jié)束位置
:其前面那個(gè)單元出現(xiàn)0次或以上(任意次數(shù))*
+:其前面那個(gè)單元出現(xiàn)1次或以上
?:其前面那個(gè)單元出現(xiàn)0次或者1次
.點(diǎn):匹配除換行符\n之外的任何單字符
\:用來轉(zhuǎn)義的符號
-
|:表示兩個(gè)之間的一個(gè)選擇米愿,或
<script type="text/javascript"> //特別字符集 //* ? + var str = "2018-03-01 is a SunShine Day"; var reg = /[0-9]+/; //["2018"] var str = "gooogle"; var reg = /go+gle/; //["gooogle"] var str = "ggle"; var reg = /go*gle/; //["ggle"] var str = "hellow 0 javascript"; var reg = /[0-9]+/; //["0"] var reg = /[0-9]*/; //[""]匹配空的字符串,因?yàn)殚_始的時(shí)候就出現(xiàn)了0次鼻吮,"沒有" var reg = /loe?w/; //["low"] var rst = str.match(reg); console.log(rst); //.點(diǎn) \ | var str = "svovk(dsf?>?*&{})!^\n}PPoo*&?"; var reg = /.*/; //["svovk(dsf?>?*&{})!^"] var str = "xiaoming like eat apple"; var reg = /banana|apple/; //["apple"] var str = '<div class="box">the box</div>'; var reg = /<div class=\"box\">the .*<\/div>/; //["<div class="box">the box</div>"]轉(zhuǎn)義在正則中有特殊含義的字符育苟,例如| / . ? + 等 var rst = str.match(reg); console.log(rst); //^和$符號 var str = "php is the best language"; var reg = /[language]/; //["language"] var reg = /[^language]/; //null 'language'在字符串的開始位置沒有出現(xiàn) var reg = /[^php]/; //["php"] var reg = /[languag$]/; //null 'languag'在字符串的結(jié)尾位置沒有出現(xiàn) var reg = /language$/; //["language"] //^和$兩符號要出現(xiàn)在每個(gè)正常的正則表達(dá)式里邊
//作用:可以“完整”地匹配輸入字符串的信息
//手機(jī)號碼驗(yàn)證:13開始,后續(xù)有9位數(shù)字狈网,不能添加其余內(nèi)容
var str = "13250185056";
var reg = /^13[0-9]{9}$/;//{m}前面單元嚴(yán)格出現(xiàn)m次
var rst = str.match(reg);
console.log(rst);
//()小闊號
//作用:
//提高字表達(dá)式優(yōu)先級
//從一個(gè)大的字符串中拆分小的字符串出來
var str = "gogle";
var reg = /(go)+(gle)/;
//rst[0] = "gogle";成功匹配的字符串
//rst[1] = "go";第一個(gè)()里面匹配成功的字符串宙搬,不成功為undefined
//rst[2] = "gle"第二個(gè)()里面匹配成功的字符串笨腥,不成功為undefined
//提取html里面的關(guān)鍵內(nèi)容
var str = '<div id="today" class="tqingtoday"><h3 style="padding-bottom:0px;">北京</h3><ul><li class="tqpng_01"><li class="sd">晴</li><li class="font_05">';
var reg = /<h3.*>(.*)<\/h3>/;
var rst = str.match(reg);
console.log(rst[0]);//"<h3 style="padding-bottom:0px;">北京</h3>"
console.log(rst[1]);//"北京"拓哺,成功提取出北京
</script>
-
()小括號使用擴(kuò)展
<script type="text/javascript"> //小括號模式單元 重復(fù)使用 var str = "2018-09-09 09:09:09"; //匹配到的時(shí)間特點(diǎn):月份、日期脖母、時(shí)士鸥、分、秒都一致 var reg = /[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+/; // ["2018-09-09 09:09:09"] //通過“\1”重復(fù)匹配前面第一個(gè)小括號模式單元內(nèi)容 var reg = /[0-9]+-([0-9]+)-\1 \1:\1:\1/; // ["2018-09-09 09:09:09","09"] //通過“\2”重復(fù)匹配前面第二個(gè)小括號模式單元內(nèi)容 var reg = /([0-9]+)-([0-9]+)-\2 \2:\2:\2/; //["2018-09-09 09:09:09","2018","09"] var str = "2018:11 2018&11"; var reg = /([0-9]+):([0-9]+) \1&\2/; //["2018:11 2018&11","2018","11"] //\m模式單元重復(fù)使用 與 {m}谆级、+烤礁、*的區(qū)別: //1讼积、\m\m\m\m 限制前面單元出現(xiàn)多次 // 重復(fù)匹配前面第m個(gè)小括號內(nèi)容 // 要求 匹配內(nèi)容與被匹配內(nèi)容的“大小和數(shù)據(jù)類型”都一致 //2、{m}脚仔、+勤众、*限制前面單元出現(xiàn)多次,出現(xiàn)的內(nèi)容只要保證“數(shù)據(jù)類型”一致即可 var str1 = "2018-03-03-03-03-03"; var str2 = "2018-03-12-15-23-57"; var reg = /[0-9]+(-[0-9]+)\1\1\1\1/; //["2018-03-03-03-03-03","-03"] null(str2匹配不成功) var reg = /[0-9]+(-[0-9]+){5}/; //["2018-03-03-03-03-03","-03"] ["2018-03-03-03-03-03","-57"] //{5}鲤脏、+们颜、* 匹配以上兩個(gè)str效果一樣 var rst = str.match(reg); console.log(rst); </script>
模式修正符
var 模式名稱 = /模式內(nèi)容/模式修正符;
i:忽略大小寫
-
g:全局匹配(進(jìn)行全局匹配的時(shí)候不給體現(xiàn)"模式單元"內(nèi)容,默認(rèn)是單次匹配猎醇,非全局)
<script type="text/javascript"> //模式修正符 var str = "Beijing2008Guangzhou2010Shanghai2012"; var reg = /[a-z]+([0-9]+)/ig; var rst = str.match(reg); console.log(rst); //["Beijing2008","Guangzhou2010","Shanghai2012"]窥突,沒有index和input屬性,不獲取()里面的內(nèi)容 </script>
組合字符集
\d:表示數(shù)字[0-9]
\D:表示非數(shù)字[^0-9]
\w:表示字母硫嘶、數(shù)字阻问、下劃線中其中一個(gè)[a-zA-Z0-9_]
\W:非字母、數(shù)字沦疾、下劃線[^a-zA-Z0-9_]
\s:表示空格
-
\S:表示非空格
<script type="text/javascript"> //組合字符集 //\d:表示數(shù)字[0-9] \D:表示非數(shù)字[^0-9] var str = "2018/03/01"; var reg = /\d+/; //["2018"] var reg = /\D/g; //["/","/"] var reg = /[^0-3]+/; //["8/"] //\w:表示字母称近、數(shù)字、下劃線中其中一個(gè)[a-zA-Z0-9_] \W:非字母哮塞、數(shù)字煌茬、下劃線[^a-zA-Z0-9_] var str = "asdas326_JIO@jiaying.yang"; var reg = /\w+/; //["asdas326_JIO"] var reg = /\W/g; //["@","."] //s:表示空格 \S:表示非空格 var str = "hellow guangzhou"; var reg = /[a-z]+\s\s\s\s\s\s[a-z]+/; //["hellow guangzhou"] var rst = str.match(reg); console.log(rst); </script>
限制字符集
- {m}:前面單元出現(xiàn)m次
- {m,}:前面單元至少出現(xiàn)m次,至多不限制
- {m,n}:前面單元出現(xiàn)至少m次彻桃,至多n次
- [^lsdf]:不是中括號中的任意一個(gè)字符
- [^a-f]:不是中括號中范圍的任意一個(gè)字符
- var reg = /^apple/; 匹配內(nèi)容開始有apple字樣
- var reg = /[^a-h]/; 不匹配a-h之間的字母
正向反向匹配
正向匹配:我們要查找出來的內(nèi)容坛善,右邊必須出現(xiàn)指定的信息,并且其是輔助條件邻眷,不是結(jié)果的一部分眠屎。
var reg = /pattern(?=模式)/;
-
正向不匹配:我們要查找出來的內(nèi)容,右邊不能出現(xiàn)指定的信息肆饶,右邊的信息是輔助條件改衩,非結(jié)果部分。
var reg = /pattern(?!模式)/;
例如:<script type="text/javascript"> //正向匹配:小寫字母字符串右邊要出現(xiàn)連續(xù)數(shù)字信息 var str1 = "javascript2018"; var str2 = "javascript@2018"; var reg = /[a-z]+(?=\d+)/; //["javascript"] 不匹配模式里面的內(nèi)容 null沒有在右邊出現(xiàn)連續(xù)數(shù)字 var str = "https://www.bmob.cn/shop/index.php?price=50&platform=0&type=2" //通過正向匹配獲取參數(shù)名稱 price驯镊、platform葫督、type var reg = /[a-z]+(?==)/g; //["price","platform","type"] //正向不匹配:右邊不能出現(xiàn)連續(xù)數(shù)字信息 var str1 = "todayABC254"; var str2 = "today123"; var reg = /[a-z]+(?!\d+)/; //["today"] 不匹配模式里面的內(nèi)容 null在右邊出現(xiàn)了連續(xù)數(shù)字 var rst = str.match(reg); console.log(rst); </script>
反向匹配:左邊必須出現(xiàn)指定信息
var reg = /(?<=模式)pattern/;
反向不匹配:左邊不能出現(xiàn)指定信息
var reg = /(?<!模式)pattern/;