JS正则表达式

原文链接:http://www.itxueyuan.org/view/5622.html

在正则表达式中,括号是一个比较特殊的操作符,它可以有三中作用,这三种都是比较常见的:

  • 第一种情况,括号用来将子表达式标记起来,以区别于其他表达式,比如很多的命令行程序都提供帮助命令,键入 h 和键入 help 的意义是一样的,那么就会有这样的表达式:
        h(elp)?//字符h之后的elp可有可无
    这里的括号仅仅为了将 elp 自表达式与整个表达是隔离(因为 h 是必选的)。
     
  • 第二种情况,括号用来分组,当正则表达式执行完成之后,与之匹配的文本将会按照规则填入各个分组,比如,某个数据库的主键是这样的格式:四个字符表示省份,然后是四个数字表示区号,然后是两位字符表示区县,如 yunn0871cg 表示云南省昆明市呈贡县(当然,看起来的确很怪,只是举个例子),我们关心的是区号和区县的两位字符代码,怎么分离出来呢?
        var pattern = /\w{4}(\d{4})(\w{2})/;
        var result = pattern.exec("yunn0871cg");
        print("city code = "+result[1]+", county code = "+result[2]);
        result = pattern.exec("shax0917cc");
        print("city code = "+result[1]+", county code = "+result[2]);

    正则表达式的 exec 方法会返回一个数组(如果匹配成功的话),数组的第一个元素(下标为0)表示整个串,第一个元素为第一个分组,第二个元素为第二个分组,以此类推。因此上例的执行结果即为:
        city code = 0871, county code = cg
        city code = 0917, county code = cc
     
  • 第三种情况,括号用来对引用起辅助作用,即在同一个表达式中,后边的式子可以引用前边匹配的文本,我们来看一个非常常见的例子:我们在设计一个新的语言,这个语言中有字符串类型的数据,与其他的程序设计语言并无二致,比如:
        var str = "hello, world";
        var str = 'fair enough';

    均为合法字符,我们可能会设计出这样的表达式来匹配该声明:
        var pattern = /['"][^'"]*['"]/;

    看来没有什么问题,但是如果用户输入:
        var str = 'hello, world";
        var str = "hello, world';

    我们的正则表达式还是可以匹配,注意这两个字符串两侧的引号不匹配!我们需要的是,前边是单引号,则后边同样是单引号,反之亦然。因此,我们需要知道前边匹配的到底是“单”还是“双”。这里就需要用到引用,JavaScript 中的引用使用斜杠加数字来表示,如\1 表示第一个分组(括号中的规则匹配的文本),\2 表示第二个分组,以此类推。因此我们就设计出了这样的表达式:
        var pattern = /(['"])[^'"]*\1/;

    在我们新设计的这个语言中,为了某种原因,在单引号中我们不允许出现双引号,同样,在双引号中也不允许出现单引号,我们可以稍作修改即可完成:
        var pattern = /(['"])[^\1]*\1/;

    这样,我们的语言中对于字符串的处理就完善了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值