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 修饰符的时候都会报错,没法进行测验了。今后补上。
参考: