以下讨论建立在正则中没有分组和子项的情况,在正则中有分组和子项时会有些许不同,具体请移步正则表达式中的分组与子项
test()方法
语法
正则.test(字符串);
作用
常用于判断用户输入数据的合法性,比如检验Email的合法性
参数
字符串
返回值
如果有匹配内容,则返回true
如果无匹配内容,则返回false
var str = 'Sumi122Sumi';
var re1 = /su/; //字符串内是否可以匹配到'su'
var re2 = /ui/; //字符串内是否可以匹配到'ul'
var re3 = /\d/; //字符串内是否可以匹配到数字
console.log(re1.test(str)); //false 由于正则区分大小写,这里没有‘su’,故返回false
console.log(re2.test(str)); //false
console.log(re3.test(str)); //true
//判断是否有数字的简单例子
var str = 'Sumi122Sumi';
var re1 = /\d/;
if(re1.test(str)){
console.log('有数字');
}else{
console.log('没有数字');
}
search()方法
语法
字符串.search(正则或字符串);
作用
找到匹配的字符串(区分大小写)出现的第一个位置
参数
正则
字符串
返回值
如果找到了,则返回该位置对应的下标值
如果没找到,则返回-1
var str = 'Sumi122Sumi';
var re1 = /Su/; //找Su第一次出现的位置
var re2 = /ui/; //找ui第一次出现的位置
var re3 = /\d/; //找数字第一次出现的位置
//参数为正则
console.log(str.search(re1)); //0
console.log(str.search(re2)); //-1
console.log(str.search(re3)); //4
//参数为字符串
console.log(str.search('su')); //-1 search()方法本身就区分大小写,所以这里用su是搜索不到的
console.log(str.search('Su')); //0
console.log(str.search('ui')); //1
search()方法和indexOf()方法的区别
- search()方法区分大小写
indexOf()方法不区分大小写 - search()方法的参数可以为字符串和正则
indexOf()方法的参数只能为字符串
match()方法
语法
字符串.match(正则或字符串);
作用
找到匹配的字符串(区分大小写),并将它存入数组中,然后返回数组
参数
正则
字符串
返回值
数组
- 如果不带g修饰符,只会匹配一个结果,并且给找到的数组添加
index
和input
属性
index
:匹配结果对应的下标值
input
:原字符串 - 如果带g修饰符,则为全局匹配,结果里放找到的匹配的所有字符
- 如果没有找到,返回
null
var str = 'sumi12su122mi1222su123mi';
var re1 = /u/;
var re2 = /\d/;
var re3 = /i/g;
var re4 = /\d/g;
var re5 = /\d\d/g;
var re6 = /\d+/g;
var re7 = /a/;
//由于这里不带g修饰符,所以只会匹配一个结果,然后添加index和input属性
console.log(str.match(re1)); //["u", index: 1, input: "sumi12su122mi122su123mi"]
console.log(str.match(re2)); //["1", index: 4, input: "sumi12su122mi122su123mi"]
//由于这里有g修饰符,所以会匹配到所有的结果,不会添加index和input属性
console.log(str.match(re3)); //["i", "i", "i"]
console.log(str.match(re4)); //["1", "2", "1", "2", "2", "2", "1", "2", "2", "1", "2", "3"]
//这里连续输入两个\d就代表寻找到所有两个连在一起的数字
console.log(str.match(re5)); //["12", "12", "22", "12", "12"]
//这里用到了量词,表示数字至少出现一次,找到的字符数量就不是确定的了,即连在一起的数字都会一起被找到并存入数组
console.log(str.match(re6)); //["12", "1222", "122", "123"]
//没有找到,返回null
console.log(str.match(re7)); //null
replace()方法
语法
字符串.replace(字符串或正则,字符串或函数);
作用
替换匹配到的第一个字符串(区分大小写)(原字符串不变)
参数
- 第一个参数:需要匹配的字符串
- 第二个参数:用于替换匹配到的字符串的内容
如果第二个参数为函数
1.一定要有返回值,否则会用undefined
取代替换后内容
2.函数有三个参数:
- 第一个参数:需要匹配的字符串
- 第二个参数:匹配到的字符串对应的下标值
- 第三个参数:原字符串
返回值
替换后的字符串
var str = 'sumisumi';
//第一个参数可以为字符串或者正则,且只替换匹配到的第一个字符串,原字符串不变
var newStr1 = str.replace('s','l');
console.log(newStr1,str); //lumisumi sumisumi
var newStr2 = str.replace(/s/,'l');
console.log(newStr2,str); //lumisumi sumisumi
//如果有g修饰符,那么匹配到的所有都可以被替换
var newStr3 = str.replace(/s/g,'1');
console.log(newStr3); //1umi1umi
//如果replace方法第二个参数为函数,那么一定要有返回值,否则用undefined取代替换后内容
var newStr4 = str.replace(/s/,function(){
return 'l';
});
console.log(newStr4); //lumisumi
var newStr4 = str.replace(/s/,function(){});
console.log(newStr4); //undefinedumisumi
//函数的三个参数分别为:需要匹配的字符串、匹配到的字符串对应的下标值、原字符串
var newStr5 = str.replace(/s/,function(a,b,c){
console.log(a,b,c); //s 0 sumisumi
});
第二个参数为函数的应用:屏蔽某些不干净的词汇
首先声明一个变量,这里不干净的词汇用 “和谐” 代替~我们的目的是将 “和谐” 替换为*
var str = '你和谐的是不是和谐的傻';
然后要用到替换字符的方法
var newStr = str.replace(/和谐的/,function(a,b,c){});
这时候就要在函数三个参数身上做文章了,这里的需求就是每一个需要屏蔽的字都被替换为*
问题来了,如何获取到被屏蔽的字的数量呢?
答案很简单,a代表的是匹配到的字符串,那么在这里就是需要被屏蔽的字符串,可以利用a.length
获取到需要被屏蔽的字符串内字符的数量
获取到数量后,如何将字符的数量和*
的数量对等起来呢?
这里需要利用for循环
,声明一个空的字符串变量,循环一次就给变量里面添加一个*
,然后将这个变量返回,屏蔽的字符串就会变为这个变量的内容了
var newStr = str.replace(/和谐的/,function(a,b,c){
var str = '';
for(var i=0;i<a.length;i++){
str += '*';
}
return str;
});
我们这里来输出一下结果
console.log(newStr); //你**的是不是和谐的傻
可以看到这里只屏蔽了第一个需要屏蔽的词语,那么我们只需要在正则里加上修饰符g就可以完善这个功能了
var newStr = str.replace(/和谐的/g,function(a,b,c){...};
完整代码如下:
var str = '你和谐的是不是和谐的傻';
var newStr = str.replace(/和谐的/g,function(a,b,c){
var str = '';
for(var i=0;i<a.length;i++){
str+='*';
};
return str;
});
console.log(newStr); //你***是不是***傻
总结
test()方法
- 常用于测试输入数据的内容是否与数据的规则匹配,例如手机号为11位数、邮箱格式为xxx@xxx.xxx等等,也正如它的名字,test测试
- 它的语法与其他三种方法不太相同,
正则.test(字符串)
,正则表达式在前 - 它的参数只能为字符串
- 它的返回值为布尔值,如果为
true
则表示有匹配的内容,如果为false
则表示没有匹配的内容
search()方法
- 用于寻找匹配到的字符串对应的下标值,与indexOf方法类似,但是它们之间还是有差别的
- 它的语法为
字符串.search(字符串或正则)
,参数可以为字符串或者正则 - 它的返回值是一个数字,如果找到了匹配的内容,返回
下标值
,如果没有找到,返回-1
- 这个方法本身就区分大小写,如果需要忽略大小写区分,则需要加上
i
修饰符
match()方法
- 用于寻找匹配到的字符串,然后将其存入数组并返回,只返回匹配到的第一个结果
- 它的语法为
字符串.match(字符串或正则)
,参数可以为字符串或者正则 - 它的返回值是数组或者null,当参数为正则时,如果没有修饰符
g
,则返回只含有一个匹配结果的数组,且会给数组加上index
和input
属性;如果有修饰符g
,则会返回含有所有匹配结果的数组,不会加上index
和input
属性;如果没有匹配到,则返回null
- 这个方法本身就区分大小写,如果需要忽略大小写区分,则需要加上
i
修饰符
replace()方法
- 用于一个字符串去替换匹配到的字符串,只替换匹配到的第一个结果
- 它的语法与上面的又不太相同,包含两个参数,
str.replace(字符串或正则,字符串或函数)
- 它的第一个参数为需要匹配的字符串,可以为正则或字符串;第二个参数为替换的匹配的字符串的字符串,可以为字符串或函数
- 它的第一个参数为正则时,如果有修饰符
g
,则会替换匹配到的所有结果;如果没有修饰符g
,则只会替换匹配到的第一个结果 - 当它的第二个参数为函数时,必须要有返回值,否则函数会返回
undefined
,并用undefined
去替换匹配到的字符串 - 当它的第二个参数为函数时,函数有三个参数,第一个参数为匹配到的需要被替换的字符串,第二个参数为匹配到的字符串对应的下标值,第三个参数为原字符串
- 它的返回值为替换后的字符串,原字符串不变
- 这个方法本身就区分大小写,如果需要忽略大小写区分,则需要加上
i
修饰符