正確使用帶有”g”標記的javascriptRegex

來源:互聯網
上載者:User

下面我們要談談帶有"g" 標記的Regex的使用問題,首先讓我們看一段代碼,從例子入手更容易理解。 複製代碼 代碼如下:1 function a(val)
2 {
3 var re = /^\d+$/g;
4 alert(re.lastIndex);
5 return re.test(val);
6 }
7 alert(a(5));
8 alert(a(6));

運行上述代碼,在不同瀏覽器中會得到不同結果,IE中:0 true 0 true,FF和Chrome中:0 true 1 false,看到這裡,想必會有人一頭霧水,感到詫異。針對這個問題,就我目前查閱資料,找到了兩種方法。

1、使用match

複製代碼 代碼如下:1 function a(val)

2
3 {
4
5 var re = /^\d+$/g;
6
7 if((""+val).match(re))
8
9 return true;
10
11 else
12
13 return false;
14
15 }
16
17 alert(a(5));
18
19 alert(a(6));

註:要使用""+val把val轉化為字串,關於match的具體使用方法可參考這裡

2、使用不帶"g" 的Regex(var re=/^\d+$/或var re=new RegExp("^[0-9]+$"))

複製代碼 代碼如下:1 function a(val)
2
3 {
4
5 var re = new RegExp("^[0-9]+$");//或者var re=/^\d+$/;
6
7 return re.test(val);
8
9 }
10
11 alert(a(5));
12
13 alert(a(6));
14
15

註:var re = new RegExp("^[0-9]+$")中只能用[0-9],不能用\d,至於為什麼,我不很明白,希望哪位知道的給講講。

不難看出,上面兩種方法是從側面考慮怎麼解決問題 的,沒有從正面解決,接下來我們從問題出現的本質上分析一下,並給出解決方案。

要從問題出現的本質考慮,我們就不得不從"g" 標記說起,帶有"g"標記的Regex有一個屬性lastIndex,該屬性存放一個整數,它聲明的是上一次匹配文本之後的第一個字元的位置。上次匹配的結果是由方法 RegExp.exec() 和 RegExp.test() 找到的,它們都以 lastIndex 屬性所指的位置作為下次檢索的起始點。這樣,就可以通過反覆調用這兩個方法來遍曆一個字串中的所有匹配文本。該屬性是可讀可寫的。只要目標字串的下一次搜尋開始,就可以對它進行設定。當方法 exec() 或 test() 再也找不到可以匹配的文本時,它們會自動把 lastIndex 屬性重設為 0。看到這裡我們不難看出問題出現的原因和解決方案了,只要我們在下次搜尋之前把lastIndex屬性重設為0即可,如下:

複製代碼 代碼如下:1 function a(val)
2
3 {
4
5 var re = /^\d+$/g;
6
7 re.lastIndex=0;//重設lastIndex為0
8
9 return re.test(val);
10
11 }
12
13 alert(a(5));
14
15 alert(a(6));

關於lastIndex的更多解釋請看這裡

至此我們已經明白問題出現的本質,以及如何較好的解決這樣的問題,希望本文對一些人有協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.