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

首頁 > 編程 > Regex > 正文

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

2020-03-16 21:10:50
字體:
來源:轉載
供稿:網友
在 Javascript 中使用 exec 進行正則表達式全局匹配時,有一個非常容易犯的錯誤,這是因為 exec() 在全局模式下的行為稍微有點復雜
 
 
本文就是介紹在使用 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。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 克山县| 灵川县| 朝阳县| 虞城县| 法库县| 江源县| 双城市| 辽阳县| 九龙城区| 崇阳县| 福清市| 娱乐| 辽阳县| 吉水县| 得荣县| 鹤山市| 娄烦县| 冀州市| 兴海县| 分宜县| 福州市| 蒙自县| 绥宁县| 彝良县| 洛阳市| 渑池县| 锦屏县| 花垣县| 麟游县| 静安区| 抚州市| 罗城| 革吉县| 耿马| 当阳市| 铜川市| 长葛市| 和平区| 青浦区| 鄂州市| 新晃|