正则基本知识积累

前端之家收集整理的这篇文章主要介绍了正则基本知识积累前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. 元字符

    ^: 串的开始

    $:串的结束

    *:零到多次匹配

    + :一道多次匹配

    ?:零或一次匹配

    \b :单词边界

  2. 转义字符

    \r:匹配回车

    \n:匹配换行

    \t:制表符

    \X# :匹配十六进制数

    \cX :匹配控制字符

  3. 范围及重复

    我们经常会遇到描述一个范围的例子,比如,从0到3的数字,所有的英文字母,包含数字,英文字母以及下滑线等等,正则表达式规定了如何表示范围:

    [...]:在集合中的任一个字符

    [^...] :不在集合中的任一个字符

    . :除\n之外的任一个字符

    \w :所有的单字,包括字母,数字及下划线

    \W :不包括所有的单字,\w的补集

    \s:所有的空白字符,包括空格,制表符

    \S:所有的非空白字符

    \d :所有的数字

    \D:所有的非数字

    \b:退格字符

  4. 简化版匹配Email的正则表达式(js版)

    var emailval = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;

    emailval.test('kmustlinux@hotmail.com');//true

    emailval.test('john.abruzzi@pl.kunming.china');//true

    emailval.test('@invalid.com');//false,不合法

    分析:

    [\w-]表示所有的字符,数字,下划线及减号

    [\w-]+表示这个集合最少重复一次

    (\.[\w-]+)括号表示一个分组

    (\.[\w-]+)*表示这个分组出现0次或多次

    @符号之后的部分与前半部分唯一不同的是,后边的一个分组的修饰符为(+),表示至少重复一次,那就意味着后半部分至少会有一个点号(.),而且点号之后至少有一个字符。这个修饰主要是用来限制输入串中必须包含域名。

    脱字符(^)和美元符号($)表示以……开始,且以……结束

  5. 脱字符(^)和美元符号($)的运用小例子

    var variable1 = /[a-zA-Z_][a-zA-Z0-9_]*/;

    var variable2 = /^[a-zA-Z_][a-zA-Z0-9_]*$/;

    console.info(variable1.test('@main'));//true

    console.info(variable2.test('@main'));//false

    分析:

    对于variable1,test在查找整个串时,发现了完整匹配variable1表达式的部分(即只要字符串中有匹配的部分),因此返回true

    对于variable2,加入了起始和结束匹配符,即字符串开始必须为字母下划线

  6. 重复

    通过加推导(+),星推导(*),以及谓词,我们可以灵活的对范围进行重复,但是我们仍然需要一种机制来提供诸如4位数字,最多10个字符等这样的精确的重复方式。这就需要用到下表中的标记

    {n}:重复n次

    {n,}:重复n或更多次

    {n,m} :重复至少n次,至多m次

    有了精确的重复方式,我们就可以来表达如身份证号码,电话号码这样的表达式。比如:

    var pid = /^(\d{15}|\d{18})$/;//身份证

    var mphone = /\d{11}/;//手机号码

    var phone = /\d{3,4}-\d{7,8}/;//电话号码

    mphone.test('13893939392');//true

    phone.test('010-99392333');//true

    phone.test('0771-3993923');//true

  7. 分组与引用

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

    第一种情况,括号用来将子表达式标记起来,以区别于其他表达式,比如很多的命令行程序都提供帮助命令,键入h和help的意义是一样的,那么就会有这样的表达式:

    h(elp)?//字符h之后的elp可有可无

    第二种情况,括号用来分组,当正则表达式执行完成之后,与之匹配的文字将会按照规则填入各个分组,比如,某个数据库的主键是这样的格式:四个字符表示省份,然后是四个数字表示区号,然后是两位字符表示区县,如yunn0871cg表示云南省昆明市呈贡县,我们关心的是区号和区县的两位字符代码,怎么分离出来呢?

    var pattern = /\w{4}(\d{4})(\w{2})/;

    var result = pattern.exec('yunn0871cg');

    console.info('city code = ' + result[1] + ',county code = ' + result[2]);

    result = pattern.exec('shax0917cc');

    console.info('city code = ' + result[1] + ',county code = ' + result[2]);

    正则表达式的exec方法会返回一个数组(如果匹配成功的话),数组的第一个元素(下标为0)表示整个串,第一个元素为第一个分组,第二个元素为第二个分组,以此类推。

    因此上例的执行结果即为:

    city code = 0871,county code = cg

    city code = 0971,county code = cc

  8. String对象对正则表达式的支持

    match :匹配正则表达式,返回匹配数组。

    replace:替换。原字符串不变,返回替换后的字符串。

    split : 分割。

    1)match

    var str = "life is very much like a mirror.";

    var result = str.match(/is|a/g);

    console.info(result);//返回["is","a"]

    2)replace

    a)replace方法不会影响原始字符串,而将新的串作为返回值。

    b)如果在替换过程中,需要对匹配的数组进行引用(正如之前的\1,\2方式那样),需要怎么做呢?我们可以通过

    $n来对第n个分组进行引用。

    var str = "<span>Welcome,John</span>";

    var result = str.replace(/(\w+),\s(\w+)/g,"$2,$1");

    console.info(result);

    可以得到这样的结果:

    <span>John,Welcome</span>

猜你在找的正则表达式相关文章