js中使用正则方法match,exec,test,search,replace,split查找或处理字符串
在使用js的正则处理字符串的时候老是被正则和字符串中的方法搞混下面就好好记录下正则处理字符串的几个方法
处理字符串的方法要么直接用 字符串对象的方法 要么就是先创建一个正则再把字符串传进去处理
正则处理方法(仅有三个)
regObj.test
该方法用来测试某个字符串是否与正则匹配,匹配就返回true,否则返回false。
该方法接受一个字符串作为参数
regObj.exec
该方法属于一个比较复杂的方法,它接受一个字符串,返回的是一个数组,数组中第0个元素是匹配的子字符串,第二个元素是正则中的第一个子分组匹配的结果(如果有子分组,即正则中存在用圆括号括起来的分组),第三个是正则中第二个子分组匹配的结果(如果有第二个子分组)...以此类推,如果没有正则子分组,那么该数组长度仅仅为1,就是匹配到的那个子字符串。同时,返回的这个数组同时还是一个对象,它拥有两个属性,分别为index表示当前匹配到的子字符串所处的位置,input属性表示被匹配的原始字符串。最后,该方法中的正则对象如果不是全局匹配,即没有g修饰符,则每次调用只会从字符串开头处匹配第一个结果,且每次调用结果都是一样的。只有指定为全局匹配,才能够按照从左往右依次去匹配,每次调用匹配一个结果,正则对象的lastIndex属性前进到本次匹配的末尾位置,下回再调用的时候,会从lastIndex处开始匹配而不是从头匹配。
下面看一个搜索一个字符串在所有图片链接的功能
var str='<img src="./1.jpg"><img src="/uploads/image/20161119/1479517894138467.png"/><img src="/uploads/image/20161119/1479518045493746.png" />'; var re = /<img.*?src\=('|")(.*?)('|").*?>/g; var redata = []; var arr=null; while (arr = re.exec(str)) { if (arr[2]) { redata.push(arr[2]); } } console.log(redata);
regObj.compile
该方法的作用是能够对正则表达式进行编译,被编译过的正则在使用的时候效率会更高,适合于对一个正则多次调用的情况下,如果对一个正则只使用一两次,那么该方法没有特别显著的效应。
接受的参数也是一个正则。
使用字符串的方法处理(5个)
stringObj.replace('a','b')
替换字符串,查找a替换成b
该方法用来将字符串中的某些子串替换为需要的内容,接受两个参数,第一个参数可以为正则或者子字符串,表示匹配需要被替换的内容,第二个参数为被替换的新的子字符串。如果声明为全局匹配则会替换所有结果,否则只替换第一个匹配到的结果。
stringObj.indexOf('a')
查找字符串a第一次出现的位置,没有找到就返回-1
stringObj.search('a','b')
该方法是string对象的一个方法,用来查找第一次匹配的子字符串的位置,如果找到就返回一个number类型的index值,否则返回-1,它返回的只是第一次匹配的位置。
它接受一个正则或者子字符串为参数。
stringObj.split('a','b')
该方法主要用来将一个字符串拆分成一个数组,它接受一个正则或者子字符(串)作为参数,返回一个数组,简单情况下,我们不需要使用正则,只有在字符串拆分规则不统一的情况下才需要使用正则,
stringObj.match('a','b')
该方法接受一个正则作为参数,用来匹配一个字符串,它的输出结果在不是全局匹配的情况下和exec方法的结果一致即一个数组并带有额外的属性,如果采用全局匹配,则不返回任何和其被匹配字符串相关的信息,只返回匹配的结果。非全局匹配下,结果和exec非全局匹配方法返回的完全一致,