您好,登錄后才能下訂單哦!
每種編程語言里都有正則表達式,而且內容基本上都是一樣的,今天就來說說我對正則表達式的理解。
我覺得正則表達式實際上就是一種規則,一種針對字符串的規則,我們可以通過正則表達式來獲取我們想要的同類型字符串或者檢驗某一字符串是否符合我們的要求。
正則表達式可以參與計算的符號有:
(),小括號,或叫圓括號,是一個分組,也是個集合。他的作用是一個匹配一串字符。比如:
/(abc)/; 該句的作用是匹配源字符串中是否有"abc"這樣的一串字符;
[],中括號,或叫方括號,是一個集合,他的作用是匹配集合中的其中一個字符。比如:
/[abc]/; 該句的作用是匹配源字符串中是否有"a"或者"b"或者"c"中的其中一個。
{},大括號,或叫花括號,是一個數量范圍,他的作用是匹配某串字符是否有N個,不能直接使用,需要和其他能代表字符的表達式配合使用。他有三種用法:
{1} 匹配一次,{1,} 匹配最少一次,最多不限,{1,5} 匹配最少一次,最多5次。比如:
/[abc]{2}/ 這句的意思是abc其中的一個是否連續出現2次,就是匹配源字符串中是否有aa 或bb 或cc;
/[abc]{2,}/ 這句的意思是abc其中的一個是否最少連續出現2次。
/[abc]{2,5}/ 這句的意思是abc其中的一個是否最少連續出現2次,最多出現5次。
其實這里有個坑:
let a = /[abc]{2,5}/; let b = ‘aaaaaa’; console.log(a.test(b));//結果為true
為什么6個a也能匹配成功?我的理解是:匹配是檢索源字符串中的其中一串是否符合正則,意思就是6個a中肯定有連續的2-5個a,所以能匹配成功。這個坑先記下,講到后面的符號時再來破他。
\,反斜杠,是轉義符,意思是反斜杠后面將要用到的字符不是表面上看起來那樣的意思,這句話有點繞,看例子就能明白了:
/\(/ 小括號在正則中的意思是分組,但用反斜杠標注之后,那他的意思就不是表面上分組的意思了,那是什么意思?意思是他就是個左小括號。再來個例子就能更明白點:
/\d/; d在正則中表面上是一個字符,但用反斜杠標注之后,他就不是個字符了,就代表所有的數字。
^ ,這個符號暫時沒有中文名字,英文名字叫caret,他有兩個作用,在表達式的開頭寫上他,代表字符串的開頭,寫到集合中,就代表非,就是不能有集合中的字符。還是例子能說明事兒:
/^a/; 這句的意思是要匹配的字符串的第一個字符必須是a;
let a=/^a/; let b = "abc"; let c = "bacd"; console.log(a.test(b));//true; b字符串開頭第一個字符是a,所以能匹配成功。 console.log(a.test(c));//false; c字符串開頭第一個字符不是a,所以匹配失敗。
$, 美元符號,作用是匹配字符串的結尾,和 ^ 的效果一樣,位置相反,直接看例子:
let a=/a$/; let b = "bca"; let c = "cad"; console.log(a.test(b));//true; b字符串最后一個字符是a,所以能匹配成功。 console.log(a.test(c));//false; c字符串最后一個字符不是a,所以匹配失敗。
| 豎線, 或 的意思,和代碼里常用的 || 用法一模一樣,就不再多說了。
? ,問號,量詞,和{}用法一樣,意思是匹配0次到1次。效果等同{0,1};
* ,星號,量詞,和{}用法一樣,意思是匹配0次到N次。效果等同{0,};
+ , 加號,量詞,和{}用法一樣,意思是匹配1次到N次。效果等同{1,};
. , 點號,不是量詞,意思是可以匹配任意一個字符。
另外還有一些轉義用法:
\d 代表任意一個數字 效果等同[0-9];
\D 代表任意一個不是數字的字符,效果等同[^0-9];
\w 代表任意一個字母、數字、_ (下劃線)、漢字。 功能很強大。
\W 代表任意一個不是字母、數字、_ (下劃線)、漢字的字符。
等等,不過那些一般情況下用不到,這里就不詳細說了。
下面要說一下正則表達式的模式:
g,全局模式,意思是要把源字符串從頭到尾匹配一遍,不論中間是否匹配成功,如果不加 g模式,那么匹配成功一次之后就不再向后匹配了。
i,不區分大小寫模式,這個很明了,不用細說。
m,多行模式
下面找幾個例子來拆解一下應該能更容易明白:
網上找的一個郵箱的正則表達式: /^[\w]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/g;
來我們解讀一遍,
^ [\w] + ( \. [\w-] + )* @ [\w-] +
開頭[任一字XX]最少一次 (點號 [任一字XX或-]最少一次)不限次 @[任一字XX或-]最少一次
(\. [\w-] + ) + $
(點號 [任一字XX或-]最少一次)最少一次 結尾
這樣能看懂么?看不懂?那就按他的規則寫一個字符串看看是不是郵箱的格式吧
^ [\w] + ( \. [\w-] + )* @ [\w-] +
開頭[任一字XX]最少一次 (點號 [任一字XX或-]最少一次)不限次 @[任一字XX或-]最少一次
這是拼接的: a3_ .b23g @ abc
(\. [\w-] + ) + $
(點號 [任一字XX或-]最少一次)最少一次 結尾
. ab4 .ab4.ab4
好了,連起來看就是:a3_.b23g@abc.ab4.ab4.ab4 哇,真是郵箱的格式,不過里面用了很多\w,我還還真沒見過用漢字的郵箱 和漢字的域名后綴,所以我們可以來改造一下,讓這個更符合我們現在的常見情況:
/^[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$/g;
恩,因為\w是可以代表數字、字母、_和漢字,我們不要漢字 ,那就寫成了 [a-zA-Z0-9_]
好的,再拼一下,那就是aB23ab@ab43.ab245.ab245 ; 跟我們常見的郵箱一樣了吧。個人感覺這一整篇文章也就最后這段的拆解法寫正則能對某些同學會有幫助了。最重要還是要多練習。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。