来源:http://www.v-ec.com/dh20156/article.asp?id=202

使用方法

創建對象
    var r = new RegExp("表達式","ig");
    適合在動態構造匹配對象時使用;
    表達式中轉義符需要使用兩次,如//d;

直接量
    var r = /表達式/ig;
    使用在任何固定模式的匹配;

常用屬性

$1...$9
    返回九个在模式匹配期间找到的、最近保存的部分。只读。
index
    返回第一个成功匹配的开始位置。只读。
lastIndex    *(注意)
    返回最后一次成功匹配的位置(下一次匹配開始的位置)。讀寫。
    只有當使用exec()或test()函數時才會寫入。
lastMatch
    返回最后匹配的字符。只读。
input
    返回查找的字符串。只读。

lastIndex

考慮以下代碼:

<script type="text/javascript">

var r = //d/g;

alert(r.test('abc1'));
alert(r.lastIndex);

alert(r.test('ab1'));
alert(r.lastIndex);

alert(r.test('a1'));
alert(r.lastIndex);

</script>

lastIndex屬于實例屬性

當一個正則表達式實例多次test或exec時,它的lastIndex將每一次都被更改。

量詞

?
    出現0次或1次
*
    出現0次或多次
+
    出現1次或多次
{n}
    一定出現n次
{n,m}
    至少出現n次,最多出現m次
{n,}
    至少出現n次

貪婪與非貪婪(惰性)的量詞

貪婪匹配:
?
*
+
{n}
{n,m}
{n,}

非貪婪匹配:
??
*?
+?
{n}?
{n,m}?
{n,}?

貪婪與非貪婪的匹配過程

考慮以下代碼:

<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>

PPT下载:http://www.v-ec.com/dh20156/code/EcmaScriptRegExp.ppt

EcmaScript正則表達式( 深入淺出系列之淺出 )相关推荐

  1. 最全正則表達式汇总—想要的都有了

    正则式太难学,并且easy忘记 ,西西是看过非常多次.都是一会就所有不记得了滴.非常多不太懂正则的朋友.在遇到须要用正则校验数据时,往往是在网上去找非常久.结果找来的还是不非常符合要求. 所以我近期把 ...

  2. Java正則表達式入门

     众所周知,在程序开发中,难免会遇到须要匹配.查找.替换.推断字符串的情况发生,而这些情况有时又比較复杂,假设用纯编码方式解决,往往会浪费程序猿的时间及精力.因此,学习及使用正則表達式,便成了解决这一 ...

  3. 正則表達式截取字符串两字符间的内容

    一.问题 我有个字符串比方a="abcdanmcadedcdeefako"那么我怎么能得到一个数组,当中数组的各项是字母a和c的中间字符.即第一项是"b"第二项 ...

  4. python使用正則表達式

    python中使用正則表達式 1. 匹配字符 正則表達式中的元字符有 .  ^  $ *   +  ?  { }  [ ]  \  | ( ) 匹配字符用的模式有 \d 匹配随意数字 \D 匹配随意非 ...

  5. JAVA正則表達式小总结

    近期项目中正在做后台校验,而后台校验也基本都是使用正則表達式校验.本文做一些粗略的总结. 1.字符串长度:.{1,10},注意有一个点在{}前,表示匹配全部.'{}'之前一定是一个捕获组,因此假设有其 ...

  6. java 正則_Java正則表達式入门

    u)     在这个模式下,假设你还启用了CASE_INSENSITIVE标志,那么它会对Unicode字符进行大写和小写不明感的匹配.默认情况下,大写和小写不敏感的匹配仅仅适用于US-ASCII字符 ...

  7. C++11中正則表達式測试

    VC++2010已经支持regex了, 能够用来编译下述代码. #include <string> #include <regex> #include <iostream ...

  8. Linux正則表達式-定位元字符

    有两个元字符用于指定字符串出如今行首或行末.脱字符(^)是指示開始的单字符正則表達式.美元符号($)是指示行结尾的单字符的正則表達式.这些通常称为"定位符",由于它们将匹配限定在特 ...

  9. 使用正則表達式对URL进行解析

    对URL进行解析,一般用到的參数有: 1.协议 如http,https 2.域名或IP 3.port号,如7001,8080 4.Web上下文 5.URI.请求资源地址 6.请求參数 一个URL演示样 ...

最新文章

  1. 46、我的C#学习笔记12
  2. Android 异步消息处理机制(Handler 、 Looper 、MessageQueue)源码解析
  3. 修改unity变量名但不丢失序列化值
  4. 网络安全:图片防盗链的实现原理
  5. Nvidia GPU如何在Kubernetes 里工作
  6. Spring : Spring @Transactional-事物提交
  7. 干货—MySQL常见的面试题+索引原理分析!
  8. tensorflow测量工具的使用
  9. ctrl z推出查看文本怎么结束_最实用的10个电脑常用快捷键!Ctrl+Z的鬼才反向了解一下!...
  10. 【图像去噪】基于matlab GUI中值+均值+维纳+小波滤波图像去噪【含Matlab源码 800期】
  11. terminal mysql_MySQL的终端(Terminal)管理数据库、数据表、数据基本操作
  12. 编译原理第二版5.1答案
  13. 天地图 政府内网 代理
  14. Excel中的Array Formula
  15. 关于pandas的时间序列中的freq频率参数如何设置的官方参考说明【以date_range方法中的freq参数举例】
  16. OpenCV中八种不同的目标追踪算法
  17. msg文件转成html文件,如何将MSG格式的文件转换为PDF格式文件?
  18. 2016OSC源创会年终盛典-综合技术专场-George Neville-Neil
  19. Zookeeper原理详解
  20. java 操作图片 叠加图片 覆盖

热门文章

  1. jQuery和Prototype兼容问题
  2. IOS之代理的使用(重点)
  3. IOS UI开发基础之超级猜图完整版本-08
  4. php 七牛云fetch,七牛云调用类
  5. md文件生成Java代码_Beetlsql自定义生成entity,mapper,md代码
  6. python flask框架剖析_python flask框架实现传数据到js的方法分析
  7. ios 自己服务器 苹果支付_iOS应用内支付(IAP)服务端端校验详解
  8. BETA、RC、ALPHA、Release、GA 等版本号的意义
  9. 组件化开发实战_一篇文章搞懂什么是前端“组件化”开发
  10. iOS coredata 多表查询