国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > regex > 正文

Javascript中使用exec進行正則表達式全局匹配時的注意事項

2020-01-20 22:16:17
字體:
來源:轉載
供稿:網友
本文就是介紹在使用 Javascript 中使用 exec 進行正則表達式全局匹配時的注意事項。
先看一下常見的用法:
復制代碼 代碼如下:

<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
// 也可以直接寫成 /http:////([^/]+)/.exec('http://www.codebit.cn');
</script>

接下來看一下全局模式下的詭異事件:
復制代碼 代碼如下:

<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')); // 并沒有返回期望的 http://YITU.org,YITU.org ,而是返回了 null
</script>

第二個語句并沒有返回期望的結果,而是返回了 null ,這是因為:
在全局模式下,當 exec() 找到了與表達式相匹配的文本時,在匹配后,它將把正則表達式對象的 lastIndex 屬性設置為匹配文本的最后一個字符的下一個位置。這就是說,您可以通過反復調用 exec() 方法來遍歷字符串中的所有匹配文本。當 exec() 再也找不到匹配的文本時,它將返回 null,并把 lastIndex 屬性重置為 0。
下面是正常的全局模式下的匹配方式:
復制代碼 代碼如下:

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

從上面的代碼我們可以看到,之所以出現第二段代碼中的問題,影響因素是 lastIndex ,所以我們可以通過將 lastIndex 手動置 0 的方式來解決這個問題。
復制代碼 代碼如下:

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

總結:
在全局模式下,如果在一個字符串中完成了一次模式匹配之后要開始檢索新的字符串,就必須手動地把 lastIndex 屬性重置為 0。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博白县| 卢龙县| 沙河市| 丹凤县| 太湖县| 汶上县| 尤溪县| 英德市| 穆棱市| 琼结县| 广灵县| 彭州市| 凌云县| 正安县| 梅河口市| 金湖县| 平和县| 石楼县| 舒兰市| 阜平县| 乡宁县| 新宁县| 祁门县| 唐河县| 宣化县| 永吉县| 齐齐哈尔市| 宜城市| 定结县| 深州市| 星子县| 鄢陵县| 衡阳县| 北流市| 通河县| 罗江县| 宜兰市| 博罗县| 固原市| 长丰县| 禄丰县|