佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 正確使用帶有g(shù)標記的javascript正則表達式

正確使用帶有g(shù)標記的javascript正則表達式

熱門標簽:電子圍欄 Linux服務(wù)器 服務(wù)器配置 團購網(wǎng)站 銀行業(yè)務(wù) Mysql連接數(shù)設(shè)置 科大訊飛語音識別系統(tǒng) 阿里云
下面我們要談?wù)剮в?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)用這兩個方法來遍歷一個字符串中的所有匹配文本。該屬性是可讀可寫的。只要目標字符串的下一次搜索開始,就可以對它進行設(shè)置。當方法 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ì),以及如何較好的解決這樣的問題,希望本文對一些人有幫助。
您可能感興趣的文章:
  • 正則表達式提取網(wǎng)址、標題、圖片等一例(.Net Asp Javascript/Js)的實現(xiàn)
  • JavaScript RegExp 正則表達式對象詳細說明
  • javascript正則表達式中參數(shù)g(全局)的作用
  • JavaScript 正則表達式之RegExp屬性、方法及應(yīng)用分析
  • javascript RegExp對象(正則表達式)
  • javascript正則表達式參數(shù)/g與/i及/gi的使用指南

標簽:江蘇 萍鄉(xiāng) 衡水 大理 衢州 蚌埠 廣元 棗莊

巨人網(wǎng)絡(luò)通訊聲明:本文標題《正確使用帶有g(shù)標記的javascript正則表達式》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    台湾省| 封开县| 招远市| 普兰县| 文水县| 顺昌县| 额济纳旗| 孝感市| 霍州市| 体育| 府谷县| 扶余县| 曲沃县| 景德镇市| 克什克腾旗| 泰来县| 新沂市| 鄂伦春自治旗| 米林县| 丽水市| 抚远县| 青州市| 桂东县| 岳普湖县| 南开区| 永胜县| 禹城市| 嵊州市| 怀远县| 华宁县| 马公市| 南江县| 和田市| 浏阳市| 淮滨县| 花垣县| 饶平县| 峨眉山市| 宜都市| 平潭县| 江阴市|