问答
1. \d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^$分别是什么?
符号 |
含义 |
\d |
查找数字 |
\w |
查找单词字符(字母、数字、下划线 ) |
\s |
查找空白字符(tab 、空格、换行、回车) |
[a-zA-Z0-9] |
查找a到z,A到Z,0到9之间的任意字符 |
\b |
匹配单词边界 |
. |
查找单个字符,除了 换行和行结束符 |
* |
匹配任意零个或多个字符 |
+ |
匹配任意至少一个字符 |
? |
匹配至多一次字符 |
x{3} |
匹配x出现三次 |
^ |
以...开始 |
$ |
以...结束 |
2.贪婪模式和非贪婪模式指什么?
- 1.贪婪模式:趋于最大长度匹配,如使用模式p匹配字符串str,结果:
abcaxc
2.非贪婪模式:匹配到结果就好,以最少字符匹配,使用模式p匹配字符串str,结果:abc
String str="abcaxc";
Patter p="ab*c";
- 如何区分两种模式:默认是贪婪模式,在量词后面加上
?
是费贪婪模式
量词:
符号 |
含义 |
+ |
一个到多个 |
? |
0或一个 |
* |
任意多个 |
{m,n} |
m到n个 |
代码
-
//写一个函数trim(str),去除字符串两边的空白字符
var mystr = " f4g hju 899 ";
console.log("111"+trim(mystr)+"111");
function trim(str){
return str.replace(/^\s*|\s+$/g,"");
}
-
//使用实现 addClass(el, cls)、hasClass(el, cls)、removeClass(el,cls),使用正则
var reg = new RegExp('(\\s|^)' + cls + '(\\b|$)'),
'g');
function hasClass(el, cls) {
return reg.test(el.className);
}
function addClass(el, cls) {
if (reg.test(el.ClassName)) return;
el.className += ' ' + cls;
}
function removeClass(el, cls) {
if (!reg.test(el.className)) return;
el.className = el.className.replace(reg, ' ');
}
3~6.
//写一个函数isEmail(str),判断用户输入的是不是邮箱
function isEmail(str){
var reg = /^[\w\.-]+@{1}[\w-]+\.[\w\.-]+$/;
console.log(reg.test(str));
}
var str1 = "355abc@163.com";
var str2 = "355-900@163.com";
var str3 = "355_900@163.com";
var str4 = "zy.Mrs@163.com";
isEmail(str1);
isEmail(str2);
isEmail(str3);
isEmail(str4);
//写一个函数isPhoneNum(str),判断用户输入的是不是手机号
function isPhoneNum(str){
var reg = /1[0-9]{10}/
console.log(reg.test(str));
}
var mystr1 = 123499999999;
var mystr2 = 1234;
var mystr3 = 123499999;
isPhoneNum(mystr1);//true
isPhoneNum(mystr2);//false
isPhoneNum(mystr3);//false
//写一个函数isValidUsername(str),判断用户输入的是不是合法的用户名(长度6-20个字符,只能包括字母、数字、下划线)
function isValidUsername(str){
var reg = /^[a-zA-Z0-9_]{6,20}$/
console.log(reg.test(str));
}
var name1 = "15123348999avuuuuuuuuuuuuuuu";
var name2 = "1234-321";
var name3 = "1E_349as99";
isValidUsername(name1);
isValidUsername(name2);
isValidUsername(name3);
//写一个函数isValidPassword(str), 判断用户输入的是不是合法密码(长度6-20个字符,包括大写字母、小写字母、数字、下划线至少两种)
function isValidPassword(str){
var reg = /^[a-zA-Z0-9_]{6,20}$/;
if(reg.test(str)){
if(/(^[a-z]+$)|(^[A-Z]+$)|(^[0-9]+$)|(^[_]+$)/.test(str)){
return false;
}
return true;
}
return false;
}
-
//写一个正则表达式,得到如下字符串里所有的颜色(#121212)
var re = /#[0-9a-fA-F]{6}/g;
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee #fd2 ";
console.log( subj.match(re) ) ; // #121212,#AA00ef
-
//下面代码输出什么? 为什么? 改写代码,让其输出hunger, world.
var str = 'hello "hunger" , hello "world"';
var pat = /".*"/g;
str.match(pat);//输出 "hunger" , hello "world"
//用非贪婪模式
var pat = /".*"?/g;
-
//补全如下正则表达式,输出字符串中的注释内容. (可尝试使用贪婪模式和非贪婪模式两种方法)
//贪婪模式
str = '.. <!-- My -- comment \n test --> .. <!----> .. '
re1 = /<[^<]+-->/g;
console.log(str.match(re1));
//非贪婪模式
str = '.. <!-- My -- comment \n test --> .. <!----> .. '
re2 = /<[\W\w]*?>/g;
console.log(str.match(re2));
-
//补全如下正则表达式
var re = /<[^>]+>/g;
var str = '<> <a href="/"> <input type="radio" checked> <b>';
alert(str.match(re)); // '<a href="/">', '<input type="radio" checked>', '<b>'