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

posted @ 2016-12-11 20:11  loutao  阅读(505)  评论(0编辑  收藏  举报