网络编程
位置:首页>> 网络编程>> JavaScript>> 快速掌握JavaScript正则表达式(2)

快速掌握JavaScript正则表达式(2)

作者:dh20156 来源:w3cgroup 发布时间:2010-01-23 11:39:00 

标签:EcmaScript,正则表达式

貪婪與非貪婪的匹配過程

考慮以下代碼:
<script type="text/javascript">
var s = 'http://www/hello/world.php';
var r1 = /.*\//g;
var r2 = /.*?\//g;
alert(s.match(r1));
alert(s.match(r2));
</script>

//貪婪匹配
匹配整個字符串
從后逐一舍去最后一個字符繼續
http://www/hello/

//非貪婪匹配
從第一個字符開始匹配
如果失敗,讀入下一個字符繼續
http:/,    /,    www/,    hello/

分組、反向引用與非捕獲性分組

用來匹配以一系列字符為一個單位的模式
    (一系列的字符作為一個整體哦)
每創建一個分組,在執行test()、match()、search()、replace()后,可以通過全局$1...$9屬性來獲取匹配到的每一個分組。
分組匹配將帶來一定的效率損耗,如果有時候不需要獲取分組的結果,可以使用非捕獲性分組:(?:一系列的字符)

候選

用來匹配a or b or n...模式。比如,匹配文件類型:
<script type="text/javascript">
var s = 'http://www/hello/world.png.php';
var r = /(?:jpg|gif|png)$/i;
alert(r.test(s));
</script>

前瞻

正向前瞻
    var r = /(aaa(?=bbb))/;
    用于匹配后面緊挨著的是bbb的串aaa


負向前瞻
    var r = /(aaa(?!bbb))/;
    用于匹配后面緊挨著的不是bbb的串aaa

Replace

Replace中使用正則,第二個參數是函數!
<script type="text/javascript">
var str = 'aaZbbZccZ';
var s = str.replace(/(.*?)Z/g,
function(){
    var ar = [];
    for(var i=0;i<arguments.length;i++){
        ar.push(arguments[i]);
    }
    alert(ar);
    ar.length = 0;
    return arguments[2];
}
);
alert(s);
</script>


當有反向引用時:
arguments[0]:匹配到的串
arguments[1]:$1
arguments[2]:$2
.............................
arguments[arguments.length-2]:匹配到的位置
arguments[arguments.length-1]:要匹配的字符串
否則,有3個形參:
arguments[0]:匹配到的串
arguments[1]:匹配到的位置
arguments[2]:要匹配的字符串
 

Replace應用

不用循环输出一至一百:
<script type="text/javascript">
var sAAA = new Array(100+1).join("a");
var sNum = sAAA.replace(/a/g,function(){
    return arguments[1]+1+"<br/>"
});
document.write(sNum);
</script>

替換所有<>為[]:
<script type="text/javascript">
var str = '<a>a</a><b>b</b><c>c</c>';
var s = str.replace(/(<)|>/g,function(x,y){
    return (y)?'[':']';
});
alert(s);
</script>

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com