0、\d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$分别是什么?
符号 | 含义 |
---|---|
\d | [0-9] 表示数字字符 |
\w | [a-zA-Z0-9_] 表示数字,大小写字母及下划线 |
\s | [\t\n\x0B\f\r] 表示空白符 |
[a-zA-Z0-9] | 表示大小写字母,数字字符 |
\b | 表示单词边界 |
. | 表示除回车符换行符的所有字符 |
* | 出现0次或多次(任意次) |
+ | 出现1一次或多次(最少出现一次) |
? | 出现0次或1次(最多出现一次) |
x{3} | 表示x字符出现3次 |
^ | 以什么字符做为开头 |
$ | 以什么字符做为结尾 |
[^abc] | 表示不是abc的所有字符 |
abc{3,5}? | ?在量词后面表示非贪婪模式,若字符串匹配,c取3个 |
(abc){10} | 表示abc字符连续出现10次 |
abc(?=def) | 匹配后面为def的abc |
1、RegExp 相关方法
- RegExp.prototype.test(str)
//测试字符串参数中是否存正则表达式模式,如果存在则返回true
var reg = /\d+\.\d{1,2}$/g;
reg.test('123.45'); //true
reg.test('34.5678'); //false
- RegExp.prototype.exec(str)
//用的不多
//正则表达式模式在字符串中查找,若找到了匹配的,返回一个结果数组,否则返回null
var reg = /\d/g;
var r = reg.exec('a1b2c3');
- String.prototype.search(reg)
//检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,忽略标志g,返回字符串的第一个匹配的位置
'a1b2c3'.search(/\d/g); //1
'a1b2c3'.search(/\d/); //1
- String.prototype.match(reg)
//非全局调用:只能执行一次匹配,返回数组,第一个元素存放的是匹配文本,第二个元素存放index,是匹配文本的起始字符在字符串中的位置,第三个元素存放input,是检索的字符串
var r = 'aaa123456'.match(/\d/); //["1", index: 3, input: "aaa123456"]
//全局调用:返回数组,存放的是字符串中所有的匹配子串,没有index和input
var r = 'aaa123456'.match(/\d/g); //["1", "2", "3", "4", "5", "6"]
- String.prototype.replace(reg, replaceStr)
//1、string对象的replace方法,我们最常用的是传入两个字符串的做法,但这种做法有个缺陷,只能replace一次
// 2、replace方法的第一个参数还可以传入RegExp对象,可以进行全局替换
'abcabcabc'.replace('bc','X'); //aXabcabc
'abcabcabc'.replace(/bc/g,'X'); //aXaXaX
- String.prototype.split(reg)
//和replace方法类似,在一些复杂的分割情况下我们可以使用正则表达式解决。
'a,b,c,d'.split(','); //["a", "b", "c", "d"];
'a1b2c3d'.split(/\d/); //["a", "b", "c", "d"]
2、写一个函数trim(str),去除字符串两边的空白字符
function trim(str){
var reg=/(^\s+|\s+$)/g;
return str.replace(reg,"");
}
var result=trim(" 345");
var result1=trim("\nabs");
3、写一个函数isEmail(str),判断用户输入的是不是邮箱
function isEmail(str){
var reg=/\w+@[0-9a-zA-Z]+[.][a-z]+/g;
return reg.test(str);
}
var result1=isEmail("[email protected]");
var result2=isEmail("[email protected]");
4、写一个函数isPhoneNum(str),判断用户输入的是不是手机号
function isPhoneNum(str){
var reg=/^1\d{10}$/g;
return reg.test(str);
}
var result1=isPhoneNum("1205425879a");
var result2=isPhoneNum("12457896312a");
var result3=isPhoneNum("12012456789");
5、写一个函数isValidUsername(str),判断用户输入的是不是合法的用户名(长度6-20个字符,只能包括字母、数字、下划线)
function isValidUsername(str){
var reg=/^\w{6,20}$/g;
return reg.test(str);
}
var result1=isValidUsername("ast");
var result2=isValidUsername("astsdg/n");
var result3=isValidUsername("astsd/n");
var result4=isValidUsername("astsdg");
var result5=isValidUsername("astsdgastsdgastsdgsd");
6、写一个函数isValidPassword(str), 判断用户输入的是不是合法密码(长度6-20个字符,只包括大写字母、小写字母、数字、下划线,且至少包括两种)
function isValidPassword(str){
if(!/^\w{6,20}$/.test(str)) return false;
if(/^\d{6,20}$/.test(str)|/^[a-z]{6,20}$/.test(str)|/^[A-Z]{6,20}$/.test(str)|/^_{6,20}$/.test(str)) return false;
return true;
}
var result1=isValidPassword("abretedggdfgfg");
var result2=isValidPassword("456456dfgdfg");
var result3=isValidPassword("____________");
7、写一个正则表达式,得到如下字符串里所有的颜色
var re = /(#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})(?=;))/g
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee "
console.log(subj.match(re)) // ['#121212', '#AA00ef']
8、下面代码输出什么? 为什么? 改写代码,让其输出[""hunger"", ""world""].
var str = 'hello "hunger" , hello "world"';
var pat = /".*"/g;
str.match(pat);
输出[""hunger" , hello "world""]
原因:因为.表示除了回车符和换行符的所有字符,代表出现0次或多次,而且后面没有?,说明是贪婪模式,是竟可能多的匹配,g代表全局搜索,所以得到这结果
var str = 'hello "hunger" , hello "world"';
var pat = /".*?"/g; //?表示非贪婪模式的匹配,匹配中用尽可能少的次数去匹配,所以得到不同结果
str.match(pat);
(mission 7)