国产探花免费观看_亚洲丰满少妇自慰呻吟_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。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涟源市| 大竹县| 九江县| 陇川县| 通道| 上杭县| 邛崃市| 伊宁市| 敖汉旗| 通河县| 平顶山市| 雅江县| 大足县| 天台县| 三门县| 华阴市| 龙川县| 泗阳县| 五家渠市| 哈密市| 洞口县| 呼图壁县| 瓦房店市| 剑阁县| 贵德县| 额济纳旗| 仙桃市| 依安县| 腾冲县| 论坛| 精河县| 德昌县| 集安市| 邢台县| 泾源县| 高尔夫| 永靖县| 工布江达县| 宁晋县| 建昌县| 海宁市|