zoukankan      html  css  js  c++  java
  • javascript中的正则表达式

    javascript中采用RegExp对象表示正则表达式。

    而RegExp对象一共有3个方法, 他们分别是:

    1、compile

    2、exec

    3、test

    那么这三个方法到底是怎么用的呢?

    首先,compile没有什么用,它只能在多次正则匹配的时候提高些许效率,先不去考虑。

    下面说说exec,它返回找到的指定的值,这个值在字符串中的位置,以及整个字符串。如果找不到,返回null。

    1 var pattern = new RegExp('man', 'g');
    2 var str1 = "i am a man"; 3 var str2 = pattern.exec(str1);
    4 console.log('str2----->', str2); //[ 'man', index: 7, input: 'i am a man' ]

     好吧,这很简单,下面看看test()方法。

    test方法其实也很简单,它只返回true 或者是 false。

    var pattern = new RegExp('man', 'g');
    var str1 = "i am a man"; var str2 = pattern.test(str1);
    console.log(
    'str2----->', str2); //true

    es5 以前, RegExp所有的方法就这三个。普通的string也有直接的正则方法。

    1. search 用来查找字符串

        用法: str.search( 'xxxx' )  

        返回:找到就返回位置,找不到返回-1。

    2. replace 用来替换字符串

       用法:str.replace( 'string in str' , 'target string' )

       返回:找到返回置换成功的字符串,找不到返回原来的字符串。

    3. match 用来查找匹配的一个或者多个字符串。

       用法:' me and me and me '.match(/me/g)

       返回:[ 'me' , 'me' , 'me'] 

       当然match 也可以单个找,去掉g 就行了

    4. split 用来将字符串以 xx 分割开来

       用法:' .exe,.zip,.tar,.tar.gz '.split( "," )

       返回:[ "exe", "zip", "tar", "tar.gz" ] 非常好用^ ^

    es5里面有三个RegExp修饰符,它们分别是

    1.   g:  匹配全局的符合条件的字符串

    2.    i:  不区分大小写匹配

    3.   m: multiline 进行多行匹配

    下面说说  g  i 和  普通模式区别,所谓普通模式,就是指没有写任何修饰符的模式:

    1 console.log('葫芦娃, 葫芦娃, 一根藤上七朵花'.match(/葫芦娃/));  //[ '葫芦娃', index: 0, input: '葫芦娃, 葫芦娃, 一根藤上七朵花' ]
    2 console.log('葫芦娃, 葫芦娃, 一根藤上七朵花'.match(/葫芦娃/g));  //[ '葫芦娃', '葫芦娃' ]
    3 
    4 console.log('huluwa, HULUWA, yi gen teng shang qi duo hua'.match(/huluwa/g));  //[ 'huluwa' ]
    5 console.log('huluwa, HULUWA, yi gen teng shang qi duo hua'.match(/huluwa/ig));  //[ 'huluwa', 'HULUWA' ]

    看代码相当清除。至于之后一行为什么用  ig  联合的格式呢?因为只使用  i  会只找第一个开始匹配到的。想要匹配全局,必须使用  g  。

    在es6的版本中,又增加了新的修饰符,它们分别是:

    1.  u :  含义为“Unicode模式”,用来正确处理大于uFFFF的Unicode字符。也就是说,会正确处理四个字节的UTF-16编码。

    2.  y :  通常叫做  “粘黏” 修饰符。功能基本和  g  修饰符一样, 最大的差别在于: g用来匹配所有,但是每次都从头开始匹配, 而  y  修饰符

         每次匹配, 从剩余的字符串中开始匹配。babel-node执行  y  修饰符的时候都会报错,没法进行测验了。今后补上。

    参考:

    http://www.w3schools.com/jsref/jsref_obj_regexp.asp

    http://es6.ruanyifeng.com/#docs/regex

  • 相关阅读:
    【纯水题】POJ 1852 Ants
    【树形DP】BZOJ 1131 Sta
    【不知道怎么分类】HDU
    【树形DP】CF 1293E Xenon's Attack on the Gangs
    【贪心算法】CF Emergency Evacuation
    【思维】UVA 11300 Spreading the Wealth
    【树形DP】NOI2003 逃学的小孩
    【树形DP】BZOJ 3829 Farmcraft
    【树形DP】JSOI BZOJ4472 salesman
    【迷宫问题】CodeForces 1292A A NEKO's Maze Game
  • 原文地址:https://www.cnblogs.com/lout/p/6087141.html
Copyright © 2011-2022 走看看