在JavaScript中,正則表達式由RegExp對象表示。RegExp對象呢,又能夠經過直接量和構造函數RegExp兩種方式建立,分別以下:linux
//直接量 var re = /pattern/[g | i | m];
//構造函數 var re = new RegExp(["pattern", ["g" | "i" | "m"]]);
其中,末尾的可選字符(g、i和m)分別表示:正則表達式
g: 模式執行一個全局匹配。簡而言之,就是找到全部匹配,而不是在找到第一個以後就中止。數組
i: 模式執行不區分大小寫的匹配。函數
m: 多行模式,^和$錨除了匹配字符串的開頭和結尾外,還匹配每行的開頭和結尾。例如,模式/Java$/m匹配"Java"和"Java\nScript"。測試
基礎篇 |
--特殊字符--spa
在正則表達式中,全部的字母字符和數字均可以按照直接量與自身匹配,如/JavaScript/匹配的就是字符串"JavaScript",可是有些特殊字符呢?如換行符。因此在JavaScript中規定以反斜槓(\)開頭的轉義序列支持這些特殊字符。經常使用的特殊字符以下:code
轉義字符regexp |
匹配htm |
\n對象 |
換行符 |
\r |
回車 |
\f |
換頁符 |
\t |
製表符 |
\v |
垂直製表符 |
--字符類--
在正則表達式中,假若將單獨的字符放入方括號([ ])中,就能夠組合成字符類。應用到匹配字符串中,咱們能夠將其當作一個漏斗,當字符串中的每一個字符經過它時,都查找是否在這個類裏面,如若在,就匹配成功,不然out。以下:
/* match爲字符串的方法,它的惟一參數就是一個正則表達式, 若是該正則表達式設置了標誌g,該方法返回的數組包含的就是出如今字符串中的全部匹配。 詳細的用法將在下面「正則表達式在String中的應用」細講 */ "abc".match(/[abc]/g);
匹配結果爲:
若是咱們的意願是,想匹配除字符a、b、c以外的字符呢?咱們能夠定義一個否認類,只需將^符號放入[ ]中做爲開頭就OK啦。以下:
"abc".match(/[^abc]/g);
因爲某些字符類常常用到,固JavaScript的正則表達式就用反斜槓(\)與一些特殊字符組合起來表示這些經常使用類,而沒必要再須要咱們自行添加,如\d。
經常使用正則字符類以下:
字符類 |
匹配 |
例子 |
[ …] |
位於方括號之中的任意字符 |
/M[onke]y/ 匹配 "Moy" |
[ ^…] |
除包含在方括號之中的任意字符 |
/M[^onke]y/ 匹配 "May" |
. |
除換行符以外的任意字符 |
/../ 匹配 "Mo" |
\w |
字母、數字或下劃線 |
/1\w/ 匹配 "1A" |
\W |
除字母、數字和下劃線以外的字符 |
/1\W/ 匹配 "1%" |
\s |
單個空白字符 |
/M\sK/ 匹配 "M K" |
\S |
單個非空白字符 |
/M\SK/ 匹配 "M_K" |
\d |
0到9的數字 |
/\d/ 匹配 "1" |
\D |
非數字 |
/\D/ 匹配 "M" |
--重複匹配--
當咱們須要匹配三位數字時,咱們能夠這樣:/\d\d\d/,可是當咱們須要匹配10位或者更多時呢?考慮到這一點,正則表達式爲咱們提供了重複字符{ n, m },表示匹配前一項至少n次,可是不能超過m次。例如,剛纔咱們所說的匹配三位數字時,咱們能夠利用重複字符這樣啦:/\d{3}/。
因爲某些重複類型常常用到,so,正則規定一些特殊字符表示這些重複類型。
正則重複字符,詳情見下:
字符 |
含義 |
例子 |
{n, m} |
匹配前一項至少n次,但不能超過m次 |
/\d{2,3}/ 匹配"12" |
{n, } |
匹配前一項至少n次,或者更多 |
/\d{2, }/ 匹配"123" |
{n} |
匹配前一項剛好n次 |
/\d{2}/ 匹配"12" |
? |
匹配前一項0次或者1次,等價於{0,1} |
/\d?/ 匹配"2" |
+ |
匹配前一項1次或者屢次,等價於{1, } |
/\d+/ 匹配"12" |
* |
匹配前一項0次或者屢次,等價於{0, } |
/\d*/ 匹配"12" |
另,以上重複字符重複規則爲:儘量多的匹配,即俗稱的「貪婪匹配」,如:"aaaa".match(/a+/);匹配的就是整個字符串"aaaa",而不是匹配到第一個字符a時,就放棄匹配。
那麼,有所謂的"貪婪匹配",就有"非貪婪匹配",它的規則嘛,確定與"貪婪匹配"相反咯,即:儘量少的匹配。
那麼,怎麼才能觸發非貪婪模式呢?
只須要在重複字符後加入?,就ok啦,如({1, 4}?、+?等),如"aaaa".match(/a+?/);就只會匹配首個字符a咯。
注意,是儘量少的匹配,而不是少的匹配哦。
神馬意思?以下:
"aaab".match(/a*b/);
"aaab".match(/a*?b/);
!匹配結果都是"aaab"!
有沒有點詫異,爲何"aaab".match(/a*?b/);的匹配結果會是"aaab",而不是"ab"呢?
那是由於正則匹配都是從左往右的,就"aaab".match(/a*?b/);而言,當遇到首字符a時,它會繼續往下匹配,直到能符合匹配模式/a*?b/爲止,這就是爲何說是儘量少的匹配,前提是知足匹配規則。
如"abbb".match(/ab*?/)的匹配結果就是"a"啦。
--字符 |、( )、(?: …)--
1.一、字符" | " 用於分隔,表示或。
什麼意思?
舉個栗子,如/ab | cd | ef/就能夠匹配字符串"ab"或者"cd"或者"ef"。
是否是和字符類[ ]很像啊?
是的,如/a | b | c/和/[abc]/匹配效果是同樣的哦。
But,字符類[ ]僅針對單個字符而言,而分隔字符" | "涉及更廣,能夠針對多個字符而言,如上述所說的/ab | cd | ef/,字符類就不行咯。
你可能會說,若是我想對利用" | "組裝的類進行屢次匹配呢?
加個括號就是啦。如:
/(ab | cd |ef)+/
好滴,說到括號,咱們再來看看它的做用。很是強大哦。
--------------------------------------分割線 --------------------------------------
Linux 基礎入門教程----正則表達式基礎 http://www.linuxidc.com/Linux/2015-08/121441.htm
Linux正則表達式sed 詳述 http://www.linuxidc.com/Linux/2015-04/116309.htm
Linux正則表達式特性及BRE與ERE的區別 http://www.linuxidc.com/Linux/2014-03/99152.htm
grep使用簡明及正則表達式 http://www.linuxidc.com/Linux/2013-08/88534.htm
正則表達式的用法 http://www.linuxidc.com/Linux/2013-03/81897.htm
正則表達式之零寬斷言 http://www.linuxidc.com/Linux/2013-03/81897.htm
Linux中正則表達式與文件格式化處理命令(awk/grep/sed) http://www.linuxidc.com/Linux/2013-03/81018.htm
基礎正則表達式 http://www.linuxidc.com/Linux/2014-09/106296.htm
經常使用正則表達式整理 http://www.linuxidc.com/Linux/2014-10/108076.htm
--------------------------------------分割線 --------------------------------------
1.二、括號"( )"
括號的做用以下:
一、咱們能夠將一個單獨的項目組合成一個子表達式,以便咱們能夠用|、*等來處理它。如,上訴所示的/(ab | cd | ef)+/。
二、利用括號括起來的部分,咱們能夠在正則表達式的後面引用前面用括號括起來的子表達式的匹配結果,注意是結果,而不是括起來的正則表達式。
針對第二點,有什麼用呢?如咱們有個需求,我想匹配在單引號或者雙引號中的數字(’12345’)時,咱們就可垂手可得利用這第二點,寫好正則表達式,以下:
/(['"])\d*\1/
測試結果以下:
好了,就第二點做用而言,結合上述demo,咱們再來看看它的具體引用法則吧:
----以反斜槓\加數字的方式,引用前面帶括號的子表達式,而這個數字呢指的就是第幾個子表達式,計算規則爲從左往右,計算遇到的左括號" ( ",到想引用的地方位置爲止,不管在括號中還嵌套不嵌套括號。
測試Demo以下:
咦,假若我只想讓括號的做用爲分組,而不想在後面計入引用呢?畢竟括號多了,很差計算呢。
那麼,咱們就來看看字符(?: …)咯。
1.三、(?: …)
(?: …)的做用就是,規定括號只用於分組,而不計入後面的引用,很差理解,看個demo就明白啦。以下:
/(Java(?:Script))(nice)/
若是我想在末尾引用子表達式nice,那麼是\2,而不是\3咯,由於用(?: …)來分組滴,只管分組,而不引用,切記切記。
對(?: …)的測試demo以下:
--匹配位置--
在前面咱們提到,建立正則對象時,可選字符m表示:多行模式,^和$錨除了匹配字符串的開頭和結尾外,還匹配每行的開頭和結尾。
那麼這個^和$就是正則爲咱們提供的匹配位置,即所謂的錨。
例如:
將/JavaScript/變爲/^JavaScript/,就只匹配字符串中開頭爲JavaScript的啦,如匹配"JavaScriptxxx"中的JavaScript,而不匹配"xxxJavaScript"中的JavaScript。
正則表達式中的錨字符詳情見下:
字符 |
含義 |
^ |
匹配字符串的開頭 |
$ |
匹配字符串的結尾 |
\b |
匹配一個詞語的邊界,指[a-zA-Z_0-9]以外的字符 |
\B |
匹配非詞語邊界位置 |
(? = p) |
正前向聲明,exp1(?=exp2),匹配後面是exp2的exp1 |
(? ! p) |
反前向聲明,exp1(?!exp2),匹配後面不是exp2的exp1 |
^和$好理解,可是\b、(?=)、(?!)可能比較陌生,結合上表,咱們再來看看下面的demo就好啦。
對於\b的Demo以下:
對於(? = p)的Demo以下:
對於(? ! p)的Demo以下:
具體應用見 下一頁
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2016-08/134160p2.htm
在JavaScript中,正則表達式由RegExp對象表示。RegExp對象呢,又能夠經過直接量和構造函數RegExp兩種方式建立,分別以下:
//直接量 var re = /pattern/[g | i | m];
//構造函數 var re = new RegExp(["pattern", ["g" | "i" | "m"]]);
其中,末尾的可選字符(g、i和m)分別表示:
g: 模式執行一個全局匹配。簡而言之,就是找到全部匹配,而不是在找到第一個以後就中止。
i: 模式執行不區分大小寫的匹配。
m: 多行模式,^和$錨除了匹配字符串的開頭和結尾外,還匹配每行的開頭和結尾。例如,模式/Java$/m匹配"Java"和"Java\nScript"。
基礎篇 |
--特殊字符--
在正則表達式中,全部的字母字符和數字均可以按照直接量與自身匹配,如/JavaScript/匹配的就是字符串"JavaScript",可是有些特殊字符呢?如換行符。因此在JavaScript中規定以反斜槓(\)開頭的轉義序列支持這些特殊字符。經常使用的特殊字符以下:
轉義字符 |
匹配 |
\n |
換行符 |
\r |
回車 |
\f |
換頁符 |
\t |
製表符 |
\v |
垂直製表符 |
--字符類--
在正則表達式中,假若將單獨的字符放入方括號([ ])中,就能夠組合成字符類。應用到匹配字符串中,咱們能夠將其當作一個漏斗,當字符串中的每一個字符經過它時,都查找是否在這個類裏面,如若在,就匹配成功,不然out。以下:
/* match爲字符串的方法,它的惟一參數就是一個正則表達式, 若是該正則表達式設置了標誌g,該方法返回的數組包含的就是出如今字符串中的全部匹配。 詳細的用法將在下面「正則表達式在String中的應用」細講 */ "abc".match(/[abc]/g);
匹配結果爲:
若是咱們的意願是,想匹配除字符a、b、c以外的字符呢?咱們能夠定義一個否認類,只需將^符號放入[ ]中做爲開頭就OK啦。以下:
"abc".match(/[^abc]/g);
因爲某些字符類常常用到,固JavaScript的正則表達式就用反斜槓(\)與一些特殊字符組合起來表示這些經常使用類,而沒必要再須要咱們自行添加,如\d。
經常使用正則字符類以下:
字符類 |
匹配 |
例子 |
[ …] |
位於方括號之中的任意字符 |
/M[onke]y/ 匹配 "Moy" |
[ ^…] |
除包含在方括號之中的任意字符 |
/M[^onke]y/ 匹配 "May" |
. |
除換行符以外的任意字符 |
/../ 匹配 "Mo" |
\w |
字母、數字或下劃線 |
/1\w/ 匹配 "1A" |
\W |
除字母、數字和下劃線以外的字符 |
/1\W/ 匹配 "1%" |
\s |
單個空白字符 |
/M\sK/ 匹配 "M K" |
\S |
單個非空白字符 |
/M\SK/ 匹配 "M_K" |
\d |
0到9的數字 |
/\d/ 匹配 "1" |
\D |
非數字 |
/\D/ 匹配 "M" |
--重複匹配--
當咱們須要匹配三位數字時,咱們能夠這樣:/\d\d\d/,可是當咱們須要匹配10位或者更多時呢?考慮到這一點,正則表達式爲咱們提供了重複字符{ n, m },表示匹配前一項至少n次,可是不能超過m次。例如,剛纔咱們所說的匹配三位數字時,咱們能夠利用重複字符這樣啦:/\d{3}/。
因爲某些重複類型常常用到,so,正則規定一些特殊字符表示這些重複類型。
正則重複字符,詳情見下:
字符 |
含義 |
例子 |
{n, m} |
匹配前一項至少n次,但不能超過m次 |
/\d{2,3}/ 匹配"12" |
{n, } |
匹配前一項至少n次,或者更多 |
/\d{2, }/ 匹配"123" |
{n} |
匹配前一項剛好n次 |
/\d{2}/ 匹配"12" |
? |
匹配前一項0次或者1次,等價於{0,1} |
/\d?/ 匹配"2" |
+ |
匹配前一項1次或者屢次,等價於{1, } |
/\d+/ 匹配"12" |
* |
匹配前一項0次或者屢次,等價於{0, } |
/\d*/ 匹配"12" |
另,以上重複字符重複規則爲:儘量多的匹配,即俗稱的「貪婪匹配」,如:"aaaa".match(/a+/);匹配的就是整個字符串"aaaa",而不是匹配到第一個字符a時,就放棄匹配。
那麼,有所謂的"貪婪匹配",就有"非貪婪匹配",它的規則嘛,確定與"貪婪匹配"相反咯,即:儘量少的匹配。
那麼,怎麼才能觸發非貪婪模式呢?
只須要在重複字符後加入?,就ok啦,如({1, 4}?、+?等),如"aaaa".match(/a+?/);就只會匹配首個字符a咯。
注意,是儘量少的匹配,而不是少的匹配哦。
神馬意思?以下:
"aaab".match(/a*b/);
"aaab".match(/a*?b/);
!匹配結果都是"aaab"!
有沒有點詫異,爲何"aaab".match(/a*?b/);的匹配結果會是"aaab",而不是"ab"呢?
那是由於正則匹配都是從左往右的,就"aaab".match(/a*?b/);而言,當遇到首字符a時,它會繼續往下匹配,直到能符合匹配模式/a*?b/爲止,這就是爲何說是儘量少的匹配,前提是知足匹配規則。
如"abbb".match(/ab*?/)的匹配結果就是"a"啦。
--字符 |、( )、(?: …)--
1.一、字符" | " 用於分隔,表示或。
什麼意思?
舉個栗子,如/ab | cd | ef/就能夠匹配字符串"ab"或者"cd"或者"ef"。
是否是和字符類[ ]很像啊?
是的,如/a | b | c/和/[abc]/匹配效果是同樣的哦。
But,字符類[ ]僅針對單個字符而言,而分隔字符" | "涉及更廣,能夠針對多個字符而言,如上述所說的/ab | cd | ef/,字符類就不行咯。
你可能會說,若是我想對利用" | "組裝的類進行屢次匹配呢?
加個括號就是啦。如:
/(ab | cd |ef)+/
好滴,說到括號,咱們再來看看它的做用。很是強大哦。
--------------------------------------分割線 --------------------------------------
Linux 基礎入門教程----正則表達式基礎 http://www.linuxidc.com/Linux/2015-08/121441.htm
Linux正則表達式sed 詳述 http://www.linuxidc.com/Linux/2015-04/116309.htm
Linux正則表達式特性及BRE與ERE的區別 http://www.linuxidc.com/Linux/2014-03/99152.htm
grep使用簡明及正則表達式 http://www.linuxidc.com/Linux/2013-08/88534.htm
正則表達式的用法 http://www.linuxidc.com/Linux/2013-03/81897.htm
正則表達式之零寬斷言 http://www.linuxidc.com/Linux/2013-03/81897.htm
Linux中正則表達式與文件格式化處理命令(awk/grep/sed) http://www.linuxidc.com/Linux/2013-03/81018.htm
基礎正則表達式 http://www.linuxidc.com/Linux/2014-09/106296.htm
經常使用正則表達式整理 http://www.linuxidc.com/Linux/2014-10/108076.htm
--------------------------------------分割線 --------------------------------------
1.二、括號"( )"
括號的做用以下:
一、咱們能夠將一個單獨的項目組合成一個子表達式,以便咱們能夠用|、*等來處理它。如,上訴所示的/(ab | cd | ef)+/。
二、利用括號括起來的部分,咱們能夠在正則表達式的後面引用前面用括號括起來的子表達式的匹配結果,注意是結果,而不是括起來的正則表達式。
針對第二點,有什麼用呢?如咱們有個需求,我想匹配在單引號或者雙引號中的數字(’12345’)時,咱們就可垂手可得利用這第二點,寫好正則表達式,以下:
/(['"])\d*\1/
測試結果以下:
好了,就第二點做用而言,結合上述demo,咱們再來看看它的具體引用法則吧:
----以反斜槓\加數字的方式,引用前面帶括號的子表達式,而這個數字呢指的就是第幾個子表達式,計算規則爲從左往右,計算遇到的左括號" ( ",到想引用的地方位置爲止,不管在括號中還嵌套不嵌套括號。
測試Demo以下:
咦,假若我只想讓括號的做用爲分組,而不想在後面計入引用呢?畢竟括號多了,很差計算呢。
那麼,咱們就來看看字符(?: …)咯。
1.三、(?: …)
(?: …)的做用就是,規定括號只用於分組,而不計入後面的引用,很差理解,看個demo就明白啦。以下:
/(Java(?:Script))(nice)/
若是我想在末尾引用子表達式nice,那麼是\2,而不是\3咯,由於用(?: …)來分組滴,只管分組,而不引用,切記切記。
對(?: …)的測試demo以下:
--匹配位置--
在前面咱們提到,建立正則對象時,可選字符m表示:多行模式,^和$錨除了匹配字符串的開頭和結尾外,還匹配每行的開頭和結尾。
那麼這個^和$就是正則爲咱們提供的匹配位置,即所謂的錨。
例如:
將/JavaScript/變爲/^JavaScript/,就只匹配字符串中開頭爲JavaScript的啦,如匹配"JavaScriptxxx"中的JavaScript,而不匹配"xxxJavaScript"中的JavaScript。
正則表達式中的錨字符詳情見下:
字符 |
含義 |
^ |
匹配字符串的開頭 |
$ |
匹配字符串的結尾 |
\b |
匹配一個詞語的邊界,指[a-zA-Z_0-9]以外的字符 |
\B |
匹配非詞語邊界位置 |
(? = p) |
正前向聲明,exp1(?=exp2),匹配後面是exp2的exp1 |
(? ! p) |
反前向聲明,exp1(?!exp2),匹配後面不是exp2的exp1 |
^和$好理解,可是\b、(?=)、(?!)可能比較陌生,結合上表,咱們再來看看下面的demo就好啦。
對於\b的Demo以下:
對於(? = p)的Demo以下:
對於(? ! p)的Demo以下:
具體應用見 下一頁
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2016-08/134160p2.htm
正則在String類中的應用 |
類String支持四種利用正則表達式的方法。分別是search、replace、match和split方法。下面將一一講述。
--String.search(regexp)--
search相對於其餘三個方法,是應用正則最簡單的方法啦,做用就是根據參數regexp查找相應匹配模式。
具體以下:
方法search中的參數爲正則表達式對象,假若咱們賦予的值不是正則表達式對象,而是字符串,那麼search在內部首先得將傳入的字符串轉換成正則表達式對象,而後再給予匹配。匹配始終從字符串的初始位置開始,當找到第一個與正則表達式相匹配的字符時,就中止匹配,並返回匹配到的子串的起始位置。若是沒有找到就返回-1。
注意:search找到第一個匹配結果後,就中止,並不會繼續查找,so,標誌g對它無效!
Demo以下:
--String.split(delimiter, limit)--
方法split,根據傳入的delimiter參數,分割字符串,並返回一個分割後的字符串數組。
例如:
指定的分隔符delimiter,能夠是字符串,也能夠是正則表達式。如上所示。
咦,不是還有一個參數limit嗎?它的做用爲啥子呢?
這個可選參數limit,爲整數,限定返回數組的最大長度。以下:
--String.replace(match, replacement)--
replace方法的做用爲:根據match指定的規則,查找字符串,若是找到匹配結果,就用第二個參數replacement去替換。假若match爲regexp對象,並指定了全局搜索標誌g,那麼將對全局查找替換,而不是在找到第一個匹配後,就中止操做。
So,參數match能夠是RegExp對象,也能夠是字符串,可是字符串由於沒有規定全局搜索標誌,因此若是match爲字符串,那麼當找到第一個匹配替換後,就中止查找。
例如:
你覺得replace方法就這麼結束了?No,No,No。
還記得在前面一頁中提到的括弧()的做用麼?
括弧能夠將須要在後續使用的內容,做爲子表達式括起來,在正則表達式中能夠利用反斜槓\加數字,對前面的子表達式引用。replace方法也有這麼一功能,固然前提是參數match爲RegExp對象,它是使用美圓符$加相應的數字來引用,數字計算規則不變。
以下:
另,replace的第二個參數replacement不只能夠爲字符串,還能夠是函數哦。當字符串中與參數match匹配成功後,就調用這個replacement回調函數。
如我想將字符串中的全部單詞的第一個字母都大寫,那麼利用replacement函數能夠這樣:
是否是很屌。
咱們再細看看,這個回調函數的參數都有哪些,以下:
第一個參數就是匹配字符串,如上面的demo;
第二個參數是正則表達式中的子表達式(括號啦),沒有子表達式,則沒有該參數
第三個參數是整數,聲明瞭匹配項出如今字符串中的位置;
第四個參數則是原字符串
--String.match(regexp)--
match方法返回與regexp相匹配結果的數組。參數regexp爲RegExp對象,若是傳入的參數不爲RegExp對象,則match內部首先將其轉換成RegExp對象。
注意:match方法返回的數組,與傳入的參數regexp帶不帶全局搜索標誌g,區別是很是大的。下面將進行說明。
一、 若是regexp不帶標誌g,那麼match方法根據參數regexp匹配到首個子串後,就將中止繼續往下查找匹配;若是一個匹配也沒找到就返回null。
以下:
你覺得就這麼結束了麼?No,No,No。
強大之處在於:若是你正則表達式中有子表達式(括號啦),那麼返回的數組arr中,還包括這些與子表達式匹配的結果哦。arr[0]爲匹配的文本,arr[1]爲匹配的第一個子表達式,如此類推。
以下:
二、 若是regexp帶有執行全局搜索標誌g,那麼match方法將返回全部與參數regexp匹配的全部結果的數組。
以下:
RegExp對象中exec和test方法 |
RegExp對象定義了兩個用於執行模式匹配操做的方法:exec和test。下面將一一講述。
--RegExp.exec(string)--
exec方法檢索參數string,當有匹配結果時,返回一個數組。沒有找到匹配結果時,則返回null。exec方法的調用分爲兩種:
一、 當RegExp中沒有全局搜索標誌g時,那麼返回結果和String.match方法同樣:返回的數組arr中,arr[0]爲匹配的文本,若是有子表達式,那麼arr[1]…就表示這些子表達式。而且將lastIndex置爲0。注:lastIndex爲RegExp對象的屬性。
以下:
二、 當RegExp中有全局搜索標誌g時,那麼返回的結果仍是和String.match同樣。咦,什麼套路?
不過,區別在於它會將RegExp對象的屬性lastIndex置爲緊接着上次找到匹配文本的字符位置,而不是爲0。
以下:
那這點不一樣有什麼用呢?
那就得看看lastIndex的做用咯。每次當,利用exec或者test方法檢索字符串時,他們都是從lastIndex的位置爲起點向後檢索。
以下:
因此,當RegExp中有全局搜索標誌g時,它將lastIndex置爲緊接着上次找到匹配文本的字符位置,那麼咱們就能夠循環檢索字符串了。
以下:
--RegExp.test(string)--
test方法檢測參數string字符串,是否含有匹配文本,若是有,則返回true,不然爲false。RegExp中帶沒帶全局搜索標誌g的區別在於,對象的屬性lastIndex。若是不帶g,則lastIndex爲0,不然將lastIndex置爲緊接着上次找到匹配文本的字符位置。
以下:
好了,梳理JavaScipt中的正則表達式就到此結束啦~