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

正確使用帶有"g"標記的javascript正則表達式

 更新時間:2009年05月29日 20:50:15   作者:  
javascript正則表達式是對字符串執(zhí)行模式匹配的強大工具。正確使用它會給我們的工作帶來很大的便利。可是有些地方由于我們沒有太注意或者根本不理解,就會遇到不可預料的麻煩。
下面我們要談談帶有"g" 標記的正則表達式的使用問題,首先讓我們看一段代碼,從例子入手更容易理解。
復制代碼 代碼如下:

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));

運行上述代碼,在不同瀏覽器中會得到不同結(jié)果,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轉(zhuǎn)化為字符串,關(guān)于match的具體使用方法可參考這里

2、使用不帶"g" 的正則表達式(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,至于為什么,我不很明白,希望哪位知道的給講講。

不難看出,上面兩種方法是從側(cè)面考慮怎么解決問題 的,沒有從正面解決,接下來我們從問題出現(xiàn)的本質(zhì)上分析一下,并給出解決方法。

要從問題出現(xiàn)的本質(zhì)考慮,我們就不得不從"g" 標記說起,帶有"g"標記的正則表達式有一個屬性lastIndex,該屬性存放一個整數(shù),它聲明的是上一次匹配文本之后的第一個字符的位置。上次匹配的結(jié)果是由方法 RegExp.exec() 和 RegExp.test() 找到的,它們都以 lastIndex 屬性所指的位置作為下次檢索的起始點。這樣,就可以通過反復調(diào)用這兩個方法來遍歷一個字符串中的所有匹配文本。該屬性是可讀可寫的。只要目標字符串的下一次搜索開始,就可以對它進行設置。當方法 exec() 或 test() 再也找不到可以匹配的文本時,它們會自動把 lastIndex 屬性重置為 0??吹竭@里我們不難看出問題出現(xiàn)的原因和解決方法了,只要我們在下次搜索之前把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));


關(guān)于lastIndex的更多解釋請看這里

至此我們已經(jīng)明白問題出現(xiàn)的本質(zhì),以及如何較好的解決這樣的問題,希望本文對一些人有幫助。

相關(guān)文章

  • 正則表達式匹配路由的實現(xiàn)代碼

    正則表達式匹配路由的實現(xiàn)代碼

    這篇文章主要介紹了正則表達式匹配路由的實現(xiàn)代碼,代碼也很簡單,感興趣的朋友參考下本文
    2018-07-07
  • js正則表達式常用函數(shù)詳解(續(xù))

    js正則表達式常用函數(shù)詳解(續(xù))

    之前一篇已經(jīng)帶領(lǐng)大家認識了一下正則表達式常用函數(shù)最基本的功能及使用方法。本文再帶領(lǐng)大家一起應用正則表達式,深入學習正則表達式中常用的方法及對象,例如:test、exec、match、replace、search等等,需要的朋友可以參考下
    2015-12-12
  • Java正則表達式提取字符的方法實例

    Java正則表達式提取字符的方法實例

    正好遇到一個需求需要將字符串中特定的字符全部提取出來,這個如果是按常規(guī)的字符串處理的話非常的繁瑣。于是想到用正則表達式來完成,對java正則表達式提取字符的方式實例感興趣的朋友一起學習吧
    2016-02-02
  • 正則表達式不區(qū)分大小寫以及解決思路的探索 .

    正則表達式不區(qū)分大小寫以及解決思路的探索 .

    今天在寫一個正則表達式的時候,因為字符有大小寫的問題,多種大小寫的組合,這時想到了用正則表達式
    2014-06-06
  • linux正則表達式awk詳解

    linux正則表達式awk詳解

    這篇文章主要介紹了linux正則表達式awk的相關(guān)資料,需要的朋友可以參考下
    2015-10-10
  • 正則表達式(regular)知識(整理)

    正則表達式(regular)知識(整理)

    正則(regular),要使用正則表達式需要導入Python中的re(regular正則的縮寫)模塊。下面通過本文給大家介紹正則表達式(regular)的相關(guān)知識,感興趣的朋友一起學習吧
    2017-05-05
  • Scala的文件讀寫操作與正則表達式

    Scala的文件讀寫操作與正則表達式

    這篇文章主要介紹了Scala的文件讀寫操作與正則表達式的相關(guān)知識,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2018-09-09
  • [a] 1 [/a]轉(zhuǎn)換為網(wǎng)址的UBB的正則

    [a] 1 [/a]轉(zhuǎn)換為網(wǎng)址的UBB的正則

    [a] 1 [/a]轉(zhuǎn)換為網(wǎng)址的UBB的正則...
    2007-11-11
  • 正則表達式匹配(URL、電話、手機、郵箱)的實例代碼

    正則表達式匹配(URL、電話、手機、郵箱)的實例代碼

    本文通過實例代碼給大家介紹了正則表達式匹配(URL、電話、手機、郵箱)的方法,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-08-08
  • 正則表達式中的反向預搜索(上)

    正則表達式中的反向預搜索(上)

    這幾天在用正則表達式做一個小程序,需要替換內(nèi)容中的某些特殊字符串。這些字符串的出現(xiàn)是有規(guī)律的,那就是在它左面總會特定的內(nèi)容出現(xiàn),右面卻沒有。于是自然就想到了反向預搜索。
    2009-12-12

最新評論