发现了一种新的SRC捕获

感觉三个捕获不是很爽,就研究了下利用预查来实现判断。。代码如下。。。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>发现了一种新的SRC捕获,利用否定预查完成</title>
</head>
<body>
<textarea id="wc" style="width:500px; height:100px;">
<img alt="var src='1'" src="'1.px'" width>
<img alt="var src='1'" src='"1.px"' width>
<img alt="var s='><img src=1>'" src=1.px>
<img alt="var src='1'" src=1.px width>
<img alt="var src='1'" src=>
<img alt="var src='1'" src= width>
<img alt="var src='1'" src="" width>
<img alt="var src='1'" src='' width>
</textarea>
<script type="text/javascript">
/*
不过效率的话,取$1$2$3明显优于取$2,但是仅高%14-%8左右。。。
/<img\b(?:"[^"]*"|'[^']*'|[^"'>])+?src=(['"]?)([^\s>"']*(?:(?!\1).[^\s>"']*)*)\1(?:"[^"]*"|'[^']*'|[^"'>])*>/ig; //严谨模式 取$2
/<img\b(?:"[^"]*"|'[^']*'|[^"'>])+?src=(?:"([^"]*)"|'([^']*)'|([^"'\s>]*))(?:"[^"]*"|'[^']*'|[^"'>])*>/ig; //严谨模式 取$1$2$3
/<img[^>]*?src=(['"]?)([^\s>"']*(?:(?!\1).[^\s>"']*)*)\1[^>]*>/ig; //简单模式 取$2
/<img\b[^>]*?src=(?:"([^"]*)"|'([^']*)'|([^"'\s>]*))[^>]*>/ig; //简单模式 取$1$2$3
- -,在简单的话,就不能保证正确的捕获到src中的内容了吧。(3引号情况)
*/
var r = /<img\b(?:"[^"]*"|'[^']*'|[^"'>])+?src=(['"]?)([^\s>"']*(?:(?!\1).[^\s>"']*)*)\1(?:"[^"]*"|'[^']*'|[^"'>])*>/ig; //严谨模式 取$2

document.getElementById('wc').value.replace(r, function (l, $1, $2) {
 alert(l + '\nsrc = |' + $2 + '|');
});
</script>
</body>
</html>

posted @ 2008-07-03 12:33  越兔  阅读(1491)  评论(4编辑  收藏  举报