欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中exec()方法詳解

 更新時(shí)間:2023年09月01日 08:34:49   作者:big男孩  
JavaScript的exec()方法是在正則表達(dá)式對(duì)象上調(diào)用的方法,它用于在字符串中執(zhí)行正則表達(dá)式搜索,并返回匹配的結(jié)果,本文就給大家詳細(xì)的講解JavaScript中exec()方法,感興趣的同學(xué)跟著小編一起來(lái)看看吧

一、RegExp對(duì)象的聲明及exec()方法的使用

聲明一個(gè)RegExp有兩種方式:

1)var re=new RegExp(pattern,modifiers);

2)var re =/pattern/modifiers;

注釋:pattern(模式): 描述了表達(dá)式的模式
modifiers(修飾符) 用于指定全局匹配、區(qū)分大小寫(xiě)的匹配和多行匹配,具體有 i 、g 和 m 三類,這三類也可以自由組合也可以不添加修飾符。

修飾符釋義
i代表忽略大小寫(xiě)
g代表全局匹配
m執(zhí)行多行匹配

示例:

1)var re=new RegExp(pattern,modifiers);

var re1=new RegExp("\w{2}");   
var re2=new RegExp("\w{2}","i"); 

2)var re =/pattern/modifiers;

var re3=/\w{2}/;
var re4=/\w{2}/ig;

使用RegExp對(duì)象的exec()方法:

直接調(diào)用即可。如果匹配到字符串返回一個(gè)數(shù)組;如果沒(méi)有匹配到返回null

1) var re1=new RegExp("\w{2}");

 var res1=re1.exec("要檢索的字符串");

2)var re3=/\w{2}/;

var res2=re3.exec("要檢索的字符串");

示例:

<!DOCTYPE html>
<html>
<head>
    <title>exec()方法的使用</title>
    <meta charset="utf-8">
</head>
<body>
    <script type="text/javascript">
        var re1=/\d[a-zA-Z]/;   //匹配兩位一個(gè)數(shù)字和一個(gè)忽略大小寫(xiě)的字母
        var res1=re1.exec('aa2edj3djie7788');
        var res2=re1.exec('458949468974484');
    </script>
</body>
</html>

我們斷點(diǎn)來(lái)看var res1=re1.exec('aa2edj3djie7788');執(zhí)行結(jié)果

image.png

我們?cè)贁帱c(diǎn)看var res2=re1.exec('458949468974484');執(zhí)行結(jié)果

image.png

綜上所知,我們使用exec()方法得到的結(jié)果有兩個(gè),一個(gè)是存有匹配字符串的數(shù)組,一個(gè)是null

二、RegExp對(duì)象和執(zhí)行exec()得到的結(jié)果分析

1)首先RegExp對(duì)象

只需要關(guān)系此對(duì)象的一個(gè)屬性,lastIndex ,這個(gè)屬性的值代表了 檢索字符串 開(kāi)始匹配的起始索引,依舊上代碼和斷點(diǎn)

<!DOCTYPE html>
<html>
<head>
    <title>exec()方法的使用</title>
    <meta charset="utf-8">
</head>
<body>
    <script type="text/javascript">
        var re1=/\d[a-zA-Z]/;   //匹配兩位一個(gè)數(shù)字和一個(gè)忽略大小寫(xiě)的字母
        var res1=re1.exec('aa2edj3djie7788');
    </script>
</body>
</html>

我們來(lái)看斷點(diǎn)中的RegExp對(duì)象,在調(diào)用exec()方法前

image.png

我們看調(diào)用exec()方法后的斷點(diǎn)

image.png

注意,這里在調(diào)用exec()方法前后,lastIndex值雖然沒(méi)有改變,但是這個(gè)屬性至關(guān)重要。
1)lastIndex代表了每次匹配要檢索的字符串的開(kāi)始匹配的起始索引位置
2)在 修飾符使用了 g 后,此屬性是變的,因此對(duì)后面理解 g修飾符是非常關(guān)鍵的。

2)執(zhí)行exec()的到的結(jié)果

這里我們只斷點(diǎn)查看數(shù)組結(jié)果,null也沒(méi)啥好看的好像。

下面看斷點(diǎn)截圖

image.png

來(lái)看下數(shù)組對(duì)象每個(gè)屬性:
var a=res1[0]; // 匹配到的字符串
var index=res1.index; //匹配到的字符串的第一個(gè)字符 在被檢索字符串String中的位置
var input=res1.input; //被檢索的字符串
stringvar length=res1.length; //數(shù)組的長(zhǎng)度

三、修飾符 i 的使用

修飾符 i 代表了匹配時(shí)忽略大小寫(xiě),下面上代碼吧。

<!DOCTYPE html>
<html>
<head>
    <title>exec()方法的使用</title>
    <meta charset="utf-8">
</head>
<body>
    <script type="text/javascript">
        var re1=new RegExp("\d[a-z]");   //匹配兩位一個(gè)數(shù)字和一個(gè)忽略大小寫(xiě)的字母
        var re2=new RegExp("\d[a-z]","i");
        var res1=re1.exec('8AJDJDJ');
        var res2=re2.exec('8AJDJDJ');
    </script>
</body>
</html>

斷點(diǎn)查看 var res1=re1.exec('8AJDJDJ'); 執(zhí)行結(jié)果

image.png

斷點(diǎn)查看 var res2=re2.exec('8AJDJDJ'); 執(zhí)行結(jié)果

image.png

四、修飾符 g 的使用

修飾符g代表全局匹配,全局匹配就是對(duì)把整個(gè)要檢索的字符串全部 匹配一遍。

原理就是 當(dāng)使用了 g 修飾符,每次調(diào)用 exec()方法后,如果匹配到了字符串,則 lastIndex屬性的值會(huì)改變。而沒(méi)有使用 g 修飾符,每次調(diào)用exec()方法后,lastIndex值永遠(yuǎn)都為0 ,所以每次調(diào)用exec()最多只會(huì)檢索出一個(gè)相同的字符。

至于使用了g修飾符,找到匹配的字符串后,lastIndex的值會(huì)被重置為匹配內(nèi)容的下一個(gè)字符在 需要檢索字符串 中的位置索引。

下面來(lái)上代碼和斷點(diǎn)吧,一目了然。我們一行行斷點(diǎn)來(lái)搞清楚 g 的原理。

<!DOCTYPE html>
<html>
<head>
    <title>exec()方法的使用</title>
    <meta charset="utf-8">
</head>
<body>
    <script type="text/javascript">
         // 使用 g 修飾符  全局搜索
         var test1=new RegExp("\d\w","g");
         var res1=test1.exec("1a2b3c4d5e");
         var res2=test1.exec("1a2b3c4d5e");
         //綜上可知, 使用g全局搜索的時(shí)候,我們可以使用循環(huán)
         do{
            var res=test1.exec("1a2b3c4d5e");
            if(res!=null){
                console.log(res[0]);
            }
         }while(res!=null);
        //沒(méi)有使用 g
        var test2=/\d{2}/;
        var result=test2.exec("22dhdhj33djdj44");
        var result1=test2.exec("22dhdhj33djdj44");
    </script>
</body>
</html>

斷點(diǎn)查看 var test1=new RegExp("\d\w","g");

image.png

斷點(diǎn)查看 執(zhí)行一次后RegExp對(duì)象 var res1=test1.exec("1a2b3c4d5e");

image.png

再執(zhí)行一次,查看斷點(diǎn) var res2=test1.exec("1a2b3c4d5e");

image.png

綜上可知,在使用g全局搜索時(shí),可以根據(jù) lastIndex對(duì)整個(gè) 要檢索字符串進(jìn)行匹配。因此,我們可以使用循環(huán)來(lái)得到 要檢索字符串中所有匹配的結(jié)果。

 do{
      var res=test1.exec("1a2b3c4d5e");
      if(res!=null){
         console.log(res[0]);
      }
}while(res!=null);

我們來(lái)看結(jié)果吧,因?yàn)槲覀円呀?jīng)執(zhí)行了兩次,所以 lastIndex此時(shí),已經(jīng)為4,因此循環(huán)檢索匹配從 要檢索字符串的索引4開(kāi)始。

image.png

下面,我們來(lái)重點(diǎn)看執(zhí)行到 結(jié)果為res[0]= 5e 時(shí)的斷點(diǎn)

image.png

我們來(lái)看這時(shí)候的RegExp對(duì)象

這時(shí)候可以看到lastIndex值為10,即下次匹配從索引10開(kāi)始,我們知道要檢索的字符串“1a2b3c4d5e”的長(zhǎng)度為10,因此下一次調(diào)用結(jié)果為null。

image.png

我們來(lái)看下一步,當(dāng)結(jié)果為null時(shí),斷點(diǎn)截圖

image.png

我們注意到,這時(shí)候,RegExp對(duì)象的屬性 lastIndex的值重置為0。即下一次再調(diào)用 exec()方法,會(huì)從 要檢索字符串的 0索引位置 開(kāi)始匹配

通過(guò)上述一步步斷點(diǎn),相信你已經(jīng)明白了全局搜索 g修飾符的使用原理。那么我們?cè)賮?lái)看,沒(méi)有設(shè)置 g的時(shí)候,代碼的斷點(diǎn)

看這一步,var test2=/\d{2}/; 斷點(diǎn)。剛開(kāi)始 test2的lastIndex值為0

image.png

執(zhí)行一次,var result=test2.exec("22dhdhj33djdj44"); 得到的結(jié)果為 22

image.png

重點(diǎn)看此時(shí)的 test2屬性 lastIndex的值,發(fā)現(xiàn)lastIndex值還是0

image.png

因?yàn)楫?dāng)非全局搜索的時(shí)候,test2不管調(diào)用幾次exec()方法 ,其屬性lastIndex值都為0。
所以,非全局搜索,每次調(diào)用exec()方法總是得到第一個(gè)相同的結(jié)果。

五、修飾符 m 的使用

修飾符m執(zhí)行多行匹配。代表多行模式multiline。

使用m時(shí)需要注意:1)當(dāng)要檢索的字符串為單行時(shí),使用 m無(wú)意義。很明顯啊,只有一行字符串使用啥 m 啊。2)當(dāng)要檢索的字符串有換行符 \n 或 \r\n時(shí),這里要看正則表達(dá)式有沒(méi)有位置符號(hào) ^ 和 $:

①當(dāng)正則表達(dá)式中存在 ^和$符號(hào)時(shí),使用了 m ,則:

“^”與字符串開(kāi)始位置以及“\n”或“\r”之后的位置相匹配,“$”與字符串結(jié)束位置以及“\n”或“\r”之前的位置相匹配。

②當(dāng)正則表達(dá)式中存在 ^和$符號(hào)時(shí),沒(méi)有使用了 m ,則:

“^”與字符串的開(kāi)始位置相匹配,“$”與字符串的結(jié)束位置相匹配。

③當(dāng)正則表達(dá)式中不存在 ^和$符號(hào)時(shí),使用了 m ,則:

正則表達(dá)式正常匹配字符串

④當(dāng)正則表達(dá)式中不存在 ^和$符號(hào)時(shí),沒(méi)有使用了 m ,則:

正則表達(dá)式正常匹配字符串

下面來(lái)具體看第二條注意中各種可能。

<!DOCTYPE html>
<html>
<head>
    <title>exec()方法的使用</title>
    <meta charset="utf-8">
</head>
<body>
    <script type="text/javascript">
        var re=/^ad{2}$/m;
        var res=re.exec("adfdd1727\r\naddjdsljs\r\nadd\nshshsh");
        var re1=/^ad{2}$/;
        var res1=re1.exec("adfdd1727\r\naddjdsljs\r\nadd\nshshsh");
    </script>
</body>
</html>

斷點(diǎn)查看結(jié)果:

1)var res=re.exec("adfdd1727\r\naddjdsljs\r\nadd\nshshsh");

image.png

這是情況①當(dāng)正則表達(dá)式中存在 ^和$符號(hào)時(shí),使用了 m ,則:

“^”與字符串開(kāi)始位置以及“\n”或“\r”之后的位置相匹配,

“$”與字符串結(jié)束位置以及“\n”或“\r”之前的位置相匹配。

2)var res1=re1.exec("adfdd1727\r\naddjdsljs\r\nadd\nshshsh");

image.png

這是情況②當(dāng)正則表達(dá)式中存在 ^和$符號(hào)時(shí),沒(méi)有使用了 m ,則:

“^”與字符串的開(kāi)始位置相匹配,

“$”與字符串的結(jié)束位置相匹配。

<!DOCTYPE html>
<html>
<head>
    <title>exec()方法的使用</title>
    <meta charset="utf-8">
</head>
<body>
    <script type="text/javascript">
        var str="fdd1727\r\naddjdsljs\r\nadd\nshshsh";
        var re=/ad{2}/m;
        var res=re.exec(str);
        var re1=/ad{2}/;
        var res1=re1.exec(str);
    </script>
</body>
</html>

斷點(diǎn)查看結(jié)果:

1)var res=re.exec(str);

image.png

這是情況③

當(dāng)正則表達(dá)式中不存在 ^和$符號(hào)時(shí),使用了 m ,則:

正則表達(dá)式正常匹配整個(gè)要檢索的字符串

2)var res1=re1.exec(str);

image.png

這是情況④

當(dāng)正則表達(dá)式中不存在 ^和$符號(hào)時(shí),沒(méi)有使用了 m ,則:

正則表達(dá)式正常匹配整個(gè)要檢索的字符串

綜上所知:
使用m的時(shí)候,只有當(dāng) 要檢索的字符串中有換行符,且正則表達(dá)式中有 ^和$位置符號(hào)時(shí),m才會(huì)起作用;
其他情況下使用和不使用m都當(dāng)一個(gè)正常的字符串 匹配檢索。

以上就是JavaScript中exec()方法詳解的詳細(xì)內(nèi)容,更多關(guān)于JavaScript exec()方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何安裝控制器JavaScript生成插件詳解

    如何安裝控制器JavaScript生成插件詳解

    這篇文章主要給大家介紹了關(guān)于如何安裝控制器JavaScript生成插件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • React類組件轉(zhuǎn)換成函數(shù)式組件

    React類組件轉(zhuǎn)換成函數(shù)式組件

    Hooks讓我們?yōu)橄嗤墓δ芫帉?xiě)更少的代碼,我們需要編寫(xiě)的代碼越少,我們就可以越快地啟動(dòng)應(yīng)用程序,hooks需要在函數(shù)組件中使用,您不能在 React 類中使用 hooks,函數(shù)式的 React 組件更加現(xiàn)代,并支持有用的 hooks,現(xiàn)在流行把舊式的類組件轉(zhuǎn)換為函數(shù)式組件
    2024-01-01
  • FormValidate 表單驗(yàn)證功能代碼更新并提供下載

    FormValidate 表單驗(yàn)證功能代碼更新并提供下載

    加入驗(yàn)證模式 4,同3,但是當(dāng)驗(yàn)證不通過(guò)時(shí),立即停止向下檢查。在模式3下,如果發(fā)生錯(cuò)誤,會(huì)把錯(cuò)誤記錄,并向下檢查,模式4就不向下檢查了
    2008-08-08
  • 利用js制作html table分頁(yè)示例(js實(shí)現(xiàn)分頁(yè))

    利用js制作html table分頁(yè)示例(js實(shí)現(xiàn)分頁(yè))

    這篇文章主要介紹了利用js制作html table的分頁(yè)示例(js實(shí)現(xiàn)分頁(yè)),需要的朋友可以參考下
    2014-04-04
  • 中高級(jí)前端必須了解的JS中的內(nèi)存管理(推薦)

    中高級(jí)前端必須了解的JS中的內(nèi)存管理(推薦)

    這篇文章主要介紹了中高級(jí)前端必須了解的JS中的內(nèi)存管理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Bootstrap每天必學(xué)之級(jí)聯(lián)下拉菜單

    Bootstrap每天必學(xué)之級(jí)聯(lián)下拉菜單

    Bootstrap每天必學(xué)之級(jí)聯(lián)下拉菜單,主要應(yīng)用場(chǎng)合有省市級(jí)關(guān)聯(lián)菜單等,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 用js遍歷 table的腳本

    用js遍歷 table的腳本

    js遍歷table的所有元素的代碼,方便我們控制table的所有元素,顏色,樣式等
    2008-07-07
  • javascript跨域的4種方法和原理詳解

    javascript跨域的4種方法和原理詳解

    這里說(shuō)的js跨域是指通過(guò)js在不同的域之間進(jìn)行數(shù)據(jù)傳輸或通信,比如用ajax向一個(gè)不同的域請(qǐng)求數(shù)據(jù),或者通過(guò)js獲取頁(yè)面中不同域的框架中(iframe)的數(shù)據(jù)。只要協(xié)議、域名、端口有任何一個(gè)不同,都被當(dāng)作是不同的域。
    2014-04-04
  • 使用dynatrace-ajax跟蹤JavaScript的性能

    使用dynatrace-ajax跟蹤JavaScript的性能

    DynaTrace 致力于分析后臺(tái)應(yīng)用性能的表現(xiàn)已經(jīng)好幾年了,最近,他們通過(guò)發(fā)布dynaTrace Ajax Edition進(jìn)入了前端性能分析領(lǐng)域. 它是一個(gè)運(yùn)行在IE下的BHO免費(fèi)工具. 雖然我喜歡Firefox和它下面的所有插件,但我知道基于IE的測(cè)試和調(diào)試也是很重要的。
    2010-04-04
  • JavaScript實(shí)現(xiàn)時(shí)鐘功能

    JavaScript實(shí)現(xiàn)時(shí)鐘功能

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)時(shí)鐘功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評(píng)論