\d,\w,\s,[a-zA-Z0-9],\b,.,,+,?,x{3},^$分别是什么?*
\d 代表匹配[0-9]的数字
\w 代表匹配[a-zA-Z0-9_]
\s 代表匹配\t\n\r在内的一些空字符
[a-zA-Z0-9] 匹配数字0-9、A-Z(不区分大小写)
\b 边界
. 匹配任意一个字符
*重复出现0次或多次类似{0,}
+ 至少出现一次 类似{1,}
? 至多出现一次 类似{0,1}
x{3},匹配连续出现3次x 的字符
^$ 匹配除了$以外的字符
贪婪模式和非贪婪模式指什么?
贪婪模式是:正则表达式,趋向于匹配到符合匹配结果长度最长的字符。
一般默认是贪婪模式
非贪婪模式是:正则表达式,趋向匹配到这个结果就好,尽可能少的匹配字符。
设置非贪婪模式后面加?
;
例如:
var regexp=/123.*/g
var regexp1=/123.*?/g
var arr="123 1234 12345 123333";
console.log(arr.match(regexp));//["123 1234 12345 123333"]
console.log(arr.match(regexp1));//["123", "123", "123", "123"]
代码题
写一个函数trim(str),去除字符串两边的空白字符
function trim(str){
//去除左边的字符串
var left=new RegExp("^\\s*","g");
// var left=/^\s*/g;
var right =new RegExp("\\s*$","g");
//去除右边的字符串
// var right=/\s*$/g;
var arr=str.replace(left,"");
console.log("去除后:"+arr.replace(right,""));
return str;
}
console.log("未开始前"+" 123456s f a f hkjh ");
var str=" 123456s f a f hkjh ";
trim(str);
使用实现 addClass(el, cls)、hasClass(el, cls)、removeClass(el,cls),使用正则
//使用实现 addClass(el, cls)、hasClass(el, cls)、removeClass(el,cls),使用正则
//提示: el为dom元素,cls为操作的class, el.className获取el元素的class
//1、addClass:为指定的dom元素添加样式。
//2、removeClass:删除指定dom元素的样式。
//3、toggleClass:如果存在(不存在),就删除(添加)一个样式。
//4、hasClass:判断样式是否存在。
function hasClass(el,cls){
var ele=new RegExp("\\b"+cls+"\\b");
if (ele.test(el)){
return "存在样式cls";
}else{
return "不存在样式cls";
}
}
function toggleClass(el,cls){
var ele=new RegExp("\\b"+cls+"\\b");
if (hasClass(el,cls)){
(el.className+"").replace(cls,"");
}else{
el.className+=""+cls
}
}
function removeClass(el.cls){
var ele=new RegExp("\\b"+cls+"\\b");
if(hasClass(el,cls)){
(el.className+"").replace(cls,"");
}
}
写一个函数isEmail(str),判断用户输入的是不是邮箱
function isEmail(str){
// var rag=new RegExp("^\w{6,18}@\w{2,4}\\.[cn]\w{1,2}$");
// var rag=/^\w{6,18}@\w{2,4}\.(c|n).+$/g;
var rag=new RegExp("^\\w{6,18}@\\w{2,4}\\.[cn].+$")
if(rag.test(str)==true){
console.log("您注册的邮箱符合规范");
}else{
console.log("邮件地址需由字母、数字或下划线组成,请重新注册")
}
}
var a="liruihao@163.net";
var b="lirui_ck@aaaa.saasda";
isEmail(a);
isEmail(b);
写一个函数isPhoneNum(str),判断用户输入的是不是手机号
function isphoneNum(str){
var reg=/^1[34578]\d{9}$/;
if(reg.test(str)){
console.log("输入的号码为手机号");
}else{
console.log("请输入正确的手机号");
}
}
str="123456678";
str1="13972023324";
str2="152311111111";
isphoneNum(str);//请输入正确的手机号
isphoneNum(str1);//输入的号码为手机号
isphoneNum(str2);//请输入正确的手机号
写一个函数isValidUsername(str),判断用户输入的是不是合法的用户名(长度6-20个字符,只能包括字母、数字、下划线)
function isValidUsername(str){
var reg=/^[\w]{6,20}$/
if (reg.test(str)){
console.log("符合标准");
}else{
console.log("不符合标准");
}
}
str="1231231231231313123123123"
isValidUsername(str);
判断用户输入的是不是合法密码(长度6-20个字符,包括大写字母、小写字母、数字、下划线至少两种) -->
<script>
function isValidPassword(str){
//全部为数字,(大小写)字母,下划线,
var reg=/^[a-z]{6,20}$|^[A-Z]{6,20}$|^[0-9]{6,20}$|^_{6,20}$/
if(reg.test(str)){
console.log("输入密码不合法");
}else{
console.log("输入密码合法");
}
}
var str="aaaaaaaaaaaaaa";
var str1="liruihaodA"
isValidPassword(str);
isValidPassword(str1);
写一个正则表达式,得到如下字符串里所有的颜色(#121212)
var re = /#[A-Fa-f0-9]{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
//下面代码输出什么? 为什么? 改写代码,让其输出hunger, world.
var str = 'hello "hunger" , hello "world"';
var pat = /".*"/g;
console.log(str.match(pat)); //'"hunger" , hello "world"'
//输出'"hunger" , hello "world"'
///".*"/g 表示匹配"." 双引号中匹配任意非转位符,默认贪婪模式,即匹配'"hunger" , hello "world"'
var reg=/"\w{5}"?/g;
console.log(str.match(reg));
补全如下正则表达式,输出字符串中的注释内容. (可尝试使用贪婪模式和非贪婪模式两种方法)
str = '.. <!-- My -- comment \n test --> .. <!----> .. <!-- asdsadasd<>安大厦--> '
re = /<!--[^\r\.]*-->/g
re2 = /<!--[^\r]*?-->/g
console.log(str.match(re) );// '<!-- My -- comment \n test -->', '<!---->'
console.log(str.match(re2) );//"<!-- My -- comment ↵ test -->", "<!---->", "<!-- asdsadasd<>安大厦-->"
补全如下正则表达式
var re = /<[^<>]+>/g//贪婪模式
var re1=/<[^<>]+?>/g//非贪婪模式.
var str = '<> <a href="/"> <input type="radio" checked> <b>';
console.log(str.match(re)); // '<a href="/">', '<input type="radio" checked>', '<b>'