亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Javascript中使用exec進(jìn)行正則表達(dá)式全局匹配時(shí)的注意事項(xiàng)

 更新時(shí)間:2011年11月27日 23:01:44   作者:  
在 Javascript 中使用 exec 進(jìn)行正則表達(dá)式全局匹配時(shí),有一個(gè)非常容易犯的錯(cuò)誤,這是因?yàn)?exec() 在全局模式下的行為稍微有點(diǎn)復(fù)雜
本文就是介紹在使用 Javascript 中使用 exec 進(jìn)行正則表達(dá)式全局匹配時(shí)的注意事項(xiàng)。
先看一下常見(jiàn)的用法:
復(fù)制代碼 代碼如下:

<script type="text/javascript">
var pattern = /http:\/\/([^\/\s]+)/;
alert(pattern.exec('http://www.codebit.cn')); // http://www.codebit.cn,www.codebit.cn
alert(pattern.exec('http://YITU.org')); // http://YITU.org,YITU.org
// 也可以直接寫(xiě)成 /http:\/\/([^/]+)/.exec('http://www.codebit.cn');
</script>

接下來(lái)看一下全局模式下的詭異事件:
復(fù)制代碼 代碼如下:

<script type="text/javascript">
var pattern = /http:\/\/([^\/\s]+)/g; // 使用了 g 修飾符
alert(pattern.exec('http://www.codebit.cn')); // http://www.codebit.cn,www.codebit.cn
alert(pattern.exec('http://YITU.org')); // 并沒(méi)有返回期望的 http://YITU.org,YITU.org ,而是返回了 null
</script>

第二個(gè)語(yǔ)句并沒(méi)有返回期望的結(jié)果,而是返回了 null ,這是因?yàn)椋?
在全局模式下,當(dāng) exec() 找到了與表達(dá)式相匹配的文本時(shí),在匹配后,它將把正則表達(dá)式對(duì)象的 lastIndex 屬性設(shè)置為匹配文本的最后一個(gè)字符的下一個(gè)位置。這就是說(shuō),您可以通過(guò)反復(fù)調(diào)用 exec() 方法來(lái)遍歷字符串中的所有匹配文本。當(dāng) exec() 再也找不到匹配的文本時(shí),它將返回 null,并把 lastIndex 屬性重置為 0。
下面是正常的全局模式下的匹配方式:
復(fù)制代碼 代碼如下:

<script type="text/javascript">
var pattern = /http:\/\/([^\/\s]+)/g;
var str = "CodeBit.cn : http://www.codebit.cn | YITU.org : http://YITU.org";
var result;
while ((result = pattern.exec(str)) != null) {
alert("Result : " + result + " LastIndex : " + pattern.lastIndex);
}
//Result : http://www.codebit.cn,www.codebit.cn LastIndex : 34
//Result : http://YITU.org,YITU.org LastIndex : 67
</script>

從上面的代碼我們可以看到,之所以出現(xiàn)第二段代碼中的問(wèn)題,影響因素是 lastIndex ,所以我們可以通過(guò)將 lastIndex 手動(dòng)置 0 的方式來(lái)解決這個(gè)問(wèn)題。
復(fù)制代碼 代碼如下:

<script type="text/javascript">
var pattern = /http:\/\/([^\/\s]+)/g; // 使用了 g 修飾符
alert(pattern.exec('http://www.codebit.cn')); // http://www.codebit.cn,www.codebit.cn
pattern.lastIndex = 0;
alert(pattern.exec('http://YITU.org')); // http://YITU.org,YITU.org
</script>

總結(jié):
在全局模式下,如果在一個(gè)字符串中完成了一次模式匹配之后要開(kāi)始檢索新的字符串,就必須手動(dòng)地把 lastIndex 屬性重置為 0。
  • 正則表達(dá)式與數(shù)學(xué)(方程式、線性方程)

    正則表達(dá)式與數(shù)學(xué)(方程式、線性方程)

    大清早的打QQ去,收到一位網(wǎng)友的信息。問(wèn)得是正則表達(dá)式判斷素?cái)?shù)的。去年看到過(guò),沒(méi)記錄下來(lái)。
    2011-04-04
  • JavaScript 表單驗(yàn)證正則表達(dá)式大全[推薦]

    JavaScript 表單驗(yàn)證正則表達(dá)式大全[推薦]

    JavaScript驗(yàn)證正則表達(dá)式大全,搜集最全的JavaScript驗(yàn)證正則表達(dá)式,開(kāi)始查看吧,這里的都是正則表達(dá)式的例子
    2009-08-08
  • PHP 正則 email語(yǔ)句詳解

    PHP 正則 email語(yǔ)句詳解

    PHP正則校驗(yàn)email的代碼相信好好學(xué)過(guò)PHP的人都應(yīng)該知道下面這段用于eamil校驗(yàn)的語(yǔ)句,但是真正能看懂的就不多了。
    2009-10-10
  • 超強(qiáng)變態(tài)的正則(\w)((?=\1\1\1)(\1))+講解

    超強(qiáng)變態(tài)的正則(\w)((?=\1\1\1)(\1))+講解

    這篇文章主要介紹了超強(qiáng)變態(tài)的正則(\w)((?=\1\1\1)(\1))+等好幾個(gè)比較強(qiáng)大到變態(tài)的規(guī)則,這里跟著腳本之家小編一起學(xué)習(xí)吧
    2020-02-02
  • mysql正則表達(dá)式 LIKE 通配符

    mysql正則表達(dá)式 LIKE 通配符

    由MySQL提供的模式匹配的其他類型是使用擴(kuò)展正則表達(dá)式。當(dāng)你對(duì)這類模式進(jìn)行匹配測(cè)試時(shí),使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它們是同義詞)。
    2009-10-10
  • 詳解正則表達(dá)式Matcher類中g(shù)roup方法

    詳解正則表達(dá)式Matcher類中g(shù)roup方法

    這篇文章主要介紹了正則表達(dá)式Matcher類中g(shù)roup方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 一個(gè)正則表達(dá)式的看法(?:)

    一個(gè)正則表達(dá)式的看法(?:)

    下午和kindle聊天的時(shí)候,他讓我看一個(gè)正則,問(wèn)我知不知道其中?:的作用,以偶半瓶水的正則功力,不知道雜解釋給他聽(tīng)了,單個(gè)一個(gè)還好理解,一起就不明白了,起碼我是沒(méi)用過(guò)..查了下資料,說(shuō)說(shuō)我的看法..
    2010-12-12
  • 最新評(píng)論