a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > regex > 正文

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

2020-01-20 22:22:17
字體:
來源:轉載
供稿:網友
下面我們要談談帶有"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));

運行上述代碼,在不同瀏覽器中會得到不同結果,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" 的正則表達式(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"標記的正則表達式有一個屬性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的更多解釋請看這里

至此我們已經明白問題出現的本質,以及如何較好的解決這樣的問題,希望本文對一些人有幫助。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲欧美日韩在线一区 | 一区二区三区久久 | 免费一区二区视频 | 亚洲天堂字幕 | 超碰香蕉 | 日韩精品专区在线影院重磅 | 中文字幕 视频一区 | 全免费一级毛片免费看 | 六月丁香啪啪 | 日日操视频 | 欧美久久久久久 | 亚洲无吗电影 | 欧洲毛片 | 国产成人精品一区二区视频免费 | 欧美三级电影在线 | 久久www免费人成看片高清 | 亚洲黄色免费看 | 成人影院网站ww555久久精品 | 日本亚洲一区 | 婷婷91| 亚洲成人动漫在线观看 | 黄色免费在线观看视频 | 日韩成人片 | 欧美日韩精品在线观看 | 黄色一级视频 | 啊v在线视频 | 一区亚洲| 亚洲国产精品成人 | 超碰在线最新 | 超碰在线中文字幕 | 久久精品视 | 不卡一区 | 久久99精品国产自在现线 | 国产91在线观看 | 91精品久久久久久久久久入口 | 日本天天操 | av三级在线免费观看 | 在线碰| 成人欧美一区二区三区黑人 | 欧美一区二区免费 | 精品九九 |