真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

node.js學習筆記之正則表達式

每種編程語言里都有正則表達式,而且內(nèi)容基本上都是一樣的,今天就來說說我對正則表達式的理解。

10年積累的成都網(wǎng)站設計、網(wǎng)站建設、外貿(mào)網(wǎng)站建設經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先做網(wǎng)站設計后付款的網(wǎng)站建設流程,更有江西免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

我覺得正則表達式實際上就是一種規(guī)則,一種針對字符串的規(guī)則,我們可以通過正則表達式來獲取我們想要的同類型字符串或者檢驗某一字符串是否符合我們的要求。

正則表達式可以參與計算的符號有:

(),小括號,或叫圓括號,是一個分組,也是個集合。他的作用是一個匹配一串字符。比如:

/(abc)/;   該句的作用是匹配源字符串中是否有"abc"這樣的一串字符;

[],中括號,或叫方括號,是一個集合,他的作用是匹配集合中的其中一個字符。比如:

/[abc]/;  該句的作用是匹配源字符串中是否有"a"或者"b"或者"c"中的其中一個。

{},大括號,或叫花括號,是一個數(shù)量范圍,他的作用是匹配某串字符是否有N個,不能直接使用,需要和其他能代表字符的表達式配合使用。他有三種用法:

{1} 匹配一次,{1,} 匹配最少一次,最多不限,{1,5} 匹配最少一次,最多5次。比如:

/[abc]{2}/ 這句的意思是abc其中的一個是否連續(xù)出現(xiàn)2次,就是匹配源字符串中是否有aa 或bb 或cc;

/[abc]{2,}/ 這句的意思是abc其中的一個是否最少連續(xù)出現(xiàn)2次。

/[abc]{2,5}/ 這句的意思是abc其中的一個是否最少連續(xù)出現(xiàn)2次,最多出現(xiàn)5次。

其實這里有個坑:

let a = /[abc]{2,5}/;
let b = ‘a(chǎn)aaaaa’;
console.log(a.test(b));//結果為true

為什么6個a也能匹配成功?我的理解是:匹配是檢索源字符串中的其中一串是否符合正則,意思就是6個a中肯定有連續(xù)的2-5個a,所以能匹配成功。這個坑先記下,講到后面的符號時再來破他。

\,反斜杠,是轉(zhuǎn)義符,意思是反斜杠后面將要用到的字符不是表面上看起來那樣的意思,這句話有點繞,看例子就能明白了:

/\(/  小括號在正則中的意思是分組,但用反斜杠標注之后,那他的意思就不是表面上分組的意思了,那是什么意思?意思是他就是個左小括號。再來個例子就能更明白點:

/\d/; d在正則中表面上是一個字符,但用反斜杠標注之后,他就不是個字符了,就代表所有的數(shù)字。

^ ,這個符號暫時沒有中文名字,英文名字叫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,};

. , 點號,不是量詞,意思是可以匹配任意一個字符。

另外還有一些轉(zhuǎn)義用法:

\d 代表任意一個數(shù)字 效果等同[0-9];

\D 代表任意一個不是數(shù)字的字符,效果等同[^0-9];

\w 代表任意一個字母、數(shù)字、_ (下劃線)、漢字。 功能很強大。

\W 代表任意一個不是字母、數(shù)字、_ (下劃線)、漢字的字符。

等等,不過那些一般情況下用不到,這里就不詳細說了。

下面要說一下正則表達式的模式:

g,全局模式,意思是要把源字符串從頭到尾匹配一遍,不論中間是否匹配成功,如果不加 g模式,那么匹配成功一次之后就不再向后匹配了。

i,不區(qū)分大小寫模式,這個很明了,不用細說。

m,多行模式

下面找?guī)讉€例子來拆解一下應該能更容易明白:

網(wǎng)上找的一個郵箱的正則表達式: /^[\w]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/g;

來我們解讀一遍,

^    [\w]   +     ( \.  [\w-]    +     )*     @ [\w-]      +

開頭[任一字XX]最少一次 (點號 [任一字XX或-]最少一次)不限次  @[任一字XX或-]最少一次

(\.   [\w-]      +    ) +      $

(點號 [任一字XX或-]最少一次)最少一次  結尾

這樣能看懂么?看不懂?那就按他的規(guī)則寫一個字符串看看是不是郵箱的格式吧

^    [\w]   +     ( \.  [\w-]    +     )*     @ [\w-]      +

開頭[任一字XX]最少一次 (點號 [任一字XX或-]最少一次)不限次  @[任一字XX或-]最少一次

這是拼接的: a3_         .b23g                    @ abc 

(\.   [\w-]      +    ) +      $

(點號 [任一字XX或-]最少一次)最少一次  結尾

  .     ab4         .ab4.ab4 

好了,連起來看就是:a3_.b23g@abc.ab4.ab4.ab4  哇,真是郵箱的格式,不過里面用了很多\w,我還還真沒見過用漢字的郵箱 和漢字的域名后綴,所以我們可以來改造一下,讓這個更符合我們現(xiàn)在的常見情況:

 /^[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$/g;

恩,因為\w是可以代表數(shù)字、字母、_和漢字,我們不要漢字 ,那就寫成了 [a-zA-Z0-9_]

好的,再拼一下,那就是aB23ab@ab43.ab245.ab245 ; 跟我們常見的郵箱一樣了吧。個人感覺這一整篇文章也就最后這段的拆解法寫正則能對某些同學會有幫助了。最重要還是要多練習。


網(wǎng)頁名稱:node.js學習筆記之正則表達式
文章地址:http://weahome.cn/article/ipoigh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部