佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 關(guān)于IE的RegExp.exec的問題

關(guān)于IE的RegExp.exec的問題

熱門標(biāo)簽:Linux服務(wù)器 阿里云 科大訊飛語音識別系統(tǒng) 團(tuán)購網(wǎng)站 Mysql連接數(shù)設(shè)置 服務(wù)器配置 電子圍欄 銀行業(yè)務(wù)
代碼如下:
復(fù)制代碼 代碼如下:

var st="A[B]C[D]E[F]G";
var reg =/\[\w\]/ig;
var s1 = st.replace(reg,"");
var s2=[];
var arr;
while((arr=reg.exec(st))!=null)s2.push(arr[0]);
alert(s1);
alert(s2.join(""));


FF下正確顯示,IE下S2為空.

網(wǎng)上查不到資料,請各位指點(diǎn)一二.

查詢過程中得了個(gè)意外收獲
復(fù)制代碼 代碼如下:

var st="A[B]C[D]E[F]G";
var reg =/\[\w\]/ig;
var s1 = st.replace(reg,"");
var s2=[];

var arr;
while((arr=/\[\w\]/ig.exec(st))!=null)s2.push(arr[0]);
alert(s1);
alert(s2.join(""));

該寫法IE死循環(huán)RegExp的lastIndex沒有得到更新

In some recent code, I'm using Javascript to parse through the result set of an AJAX call, which happens to be returning a full HTML page. Yes, ideally, I'd have an AJAX call return something usable like JSON, but in this case the PHP back-end code had to remain as is and the front-end adjust to handle the legacy HTML it returned.
I needed to grab a link (1 or more) from the returned HTML page so that I could immediately display those links in separate windows (each was a generated report). So, my first stab at this is shown in the following code example. Basically, we have setup a string to represent the returned HTML, in this case it contains 3 a> links; and we want to use the standard Javascript RegExp object's exec() method to grab the URLS (href parameter) for each of those links. In our example, we just print them out in an unordered list to see what we've captured. The important lines of code we'll be looking at are highlighted in the example below.
復(fù)制代碼 代碼如下:

var s='a href="x">X/a>\na href="y">Y/a>\na href="z">Z/a>\n';
document.write('Found the following link URLs in the string:br/>ul>');
while (matches = /a href=['"](.*)['"]>.*\/a>/g.exec(s)) {
document.write('li>' + matches[1] + '/li>\n');
}
document.write('/ul>');

Which, when run, we get the following results in Firefox/Safari/Chrome:
Found the following link URLs in the string:
x
y
z
Our while loop using RegExp.exec() on our in-line regular expression does what it's supposed to and continues to match from where it left off in the string giving us our captured portion in the matches[] array. However, when run in Internet Explorer, we get the following lovely result (at least up until IE tells us the script is no longer responding and asks us to kill it):
Found the following link URLs in the string:
x
x
x
x
x
x
x
x
x
…ad infinitum…
Obviously, we have generated an infinite loop using our code above in IE; but why? The issue is that IE doesn't correctly maintain the lastIndex member for the regular expression object each iteration through the loop. Each time through the loop, which if you look at the highlighted code is in-lined, IE creates a new RegExp object and hence resets the lastIndex member to the beginning of the string. Therefore, we match the first link in the string infinitely as the lastIndex pointer never progresses between matches. There is a way around this, and that is to declare the regular expression separately, outside the loop, (it gets created just once) and then call exec() on that singular RegExp object as follows:
復(fù)制代碼 代碼如下:

var rx = /a href=['"](.*)['"]>.*\/a>/g;
var s='a href="x">X/a>\na href="y">Y/a>\na href="z">Z/a>\n';
document.write('Found the following link URLs in the string:br/>ul>');
while (matches = rx.exec(s)) {
document.write('li>' + matches[1] + '/li>\n');
}
document.write('/ul>');

Now, the lastIndex member of our RegExp object gets updated correctly and we get the results we expected. Somewhat related to this item is the following interesting lastIndex bug in IE with zero-length matches. Hopefully, this will save someone a headache when trying to debug using Javascript RegExp.exec().

標(biāo)簽:蚌埠 江蘇 廣元 衢州 大理 衡水 棗莊 萍鄉(xiāng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《關(guān)于IE的RegExp.exec的問題》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    游戏| 郸城县| 南京市| 周至县| 石泉县| 冀州市| 邻水| 准格尔旗| 芦山县| 莱州市| 临潭县| 海丰县| 湘西| 安图县| 东至县| 安乡县| 新竹县| 连山| 康保县| 搜索| 密山市| 奉贤区| 西城区| 宣威市| 尉氏县| 钟祥市| 永安市| 宣武区| 山阴县| 通海县| 舒城县| 土默特右旗| 永安市| 仙游县| 奉节县| 八宿县| 达拉特旗| 林口县| 镶黄旗| 东至县| 定远县|