1)元字符
(?=D+d) 条件是首字母不能是数字,但是整个字符串中必须含有一个数字
(?=.*[a-z]) 必须包含一个小写字母,字母可以任意位置
(?=.*[A-Z]) 必须包含一个大写字母,字母可以任意位置
([a-zA-Z0-9]{8,16}) 大小写字母和数字字符最少八个,最多十六个
/^(?=D+d)(?=.*[a-z])(?=.*[A-Z])[A-Za-z0-9]{8,16}$/ 最少一个大写字母和小写字母,数字字母大小写总长度最少八个最多十六个
var reg=/abc/;
abc是元字符,要求必须包含a接下来是b,再接下来是c的字符
console.log('acdssdh').match(reg)); //false
通配符 . 任意一个字符
var reg=/c.t/g;
console.log('cdtcat'.match(reg)); //true
. 将通配符转换为字符点的含义
var str='a.tabt';
console.log(str.match(/a.t/g)); //true
当遇到内容 相当于将内容转换为字符 \ 表示字符
满足[]内任意一个字符 中括号内代表任意一个字符
let str='a&tacta1tadtalt';
console.log(str.match(/a.t/g));
console.log(str.match(/a[abcdefg]t/g));
[0-9] 0到9的自然数
[a-z] a到z的小写字母
[A-Z] A到Z的大写字母
[a-zA-Z]
[0-9a-zA-Z]
[u4e00-u9fa5] 所有汉字的区间
. 通配符在[]内不需要转义,因为在中括号内,就是字符,不是通配符
除了通配符. 以外在[]内其他符号还是需要转义 [,], 这两个字符也需要转义
不管中括号内有什么内容,都只代表一个字符
console.log("1231".match(/[1-31]/g)); //123 多出重复的的1无效
反义字符
/[^0-9] / 除了数字以外的所有字符
/[^a-zA-Z]/ 除了字母外的
/[a^bc]/ 如果^不是在第一位,就是字符本身。实际这个是匹配 acd^四个字符中任意一个
常用区间快捷方法
/w/ === /[a-zA-Z0-9]/
/W/ ===/^[a-zA-Z0-9]/
/d/ ===/[0-9]/
/D/ ===/^[0-9]/
/s/ ===/ / 空格
/S/ ===/^ / 非空
2)重复
var str='caaaaaaat';
console.log(/caaaaaaat/.test(str));
a{7} a重复七次
console.log(/ca{7}t.test(str));
任何内容重复0次都是 "" a{0} Z{0} 9{0} 都是空字符
console.log("aaaaaaaaaa".match(/aa{0}/g)); // aa{0} ==> a"" ==> a
var str="caat"; //希望满足可以匹配任意区间的a
要满足这样的重复次数就确定最小重复次数为2,最大重复次数为五次
console.log(/ca{2,5}t/.test("caaaaa"));//true
{} 花括号内第一个值是最小重复的值,第二个值是最大重复的值
{0,1} 有或者没有都可以
console.log(/cats{0,1}/.test("cat"));//true
最大优先匹配 贪婪匹配
console.log("aaaaaaaaaaaaab".match(/a{0,4}/g));//匹配了所有的a
最少2个最多不限
console.log("caaaaaaaaaaat".match(/ca{2,}t/));
console.log("aaaaaaaaaa".match(/a{0,}/g));//输出所有的a
常用字符
/ca{0,}t/ === /ca*t/ {0,} * 有或者没有,有多少个都可以
/ca{1,}t/ === /ca+t/ {1,} + 有至少一个以上
/ca{0,1}t/ === /ca?t/ {0,1} ? 有没有都可以,最多一个
起始符和结束符
^ 写在[]叫反义,写在中括号外最前叫起始
$ 写在正则最后叫结束
/^a$/ "a"
/^abc$/ "abc"
非贪婪匹配
console.log("caataaaataaaaat".match(/c.*t/));
console.log("caataaaaataaaat".match(/c.*?t/));
非贪婪匹配
console.log(/</?.+?>/g);
| 或者
console.log("abac".match(/a[bc]/g));
console.log("abac".match(/ab|ac/g));
console.log("abcd".match(/a|b|c|d/g)); // /[abcd]/
console.log("abcd".match(/a|b|c|d|/g));
当多写一个或者符号,代表或者一个空字符 ""
单词去空格
紧邻其后
?= 紧邻的会,其他的不会 ?!当前紧邻的不会,其他的会
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="text"><span></span>
<div></div>
<script>
var span,ids,div;
init();
function init(){
div=document.querySelector("div");
span=document.querySelector('span');
var input=document.querySelector("input");
input.addEventListener("input",inputHandler);
}
function inputHandler(e){
if(ids) return;
// console.log(e.currentTarget);
// input是自己起的参数名,就是下面传入e.currentTarget
ids=setTimeout(function(input){
clearTimeout(ids);
ids=0;
// console.log(this); ????window
// e.currentTarget 不存在 ????因为setTimeOut执行时间比较晚,异步
judgeTextContent(input.value)
// 文本框中只有数字
// input.value=input.value.replace(/D/g,"");
},500,e.currentTarget)
}
function judgeTextContent(value){
judgeTxt(value)
}
/*判断有没有字符
function judgeTxt(value){
if(/[a-zA-Z]/g.test(value)){
span.textContent="包含有字符";
span.style.color="red";
}else{
span.textContent="不包含字符";
span.style.color="green";
}
} */
/*判断字符串中是否包含1-3
function judgeTxt(value){
if(/[1-3]/g.test(value)){
span.textContent="包含1-3";
span.style.color="green";
}else{
span.textContent="不包含1-3";
span.style.color="red";
}
} */
/* 判断内容是否是纯数字
function judgeTxt(value){
// 包含数字以外的其他字符
if(/[^0-9]/.test(value)){
span.textContent="不是纯数字";
span.style.color="red";
}else{
span.textContent="是纯数字";
span.style.color="green";
}
} */
/* 将符号转换为中文
function judgeTxt(value){
div.textContent=value.replace(/[+-*/=]/g,function(item){
switch(item){
case "+": return "加";
case "-": return "减";
case "*": return "乘";
case "/": return "除";
case "=": return "等于";
}
})
} */
/*
function judgeTxt(value){
// 这个约定字符长度6-9位
// if(/^[a-z][0-9]{5,8}$/.test(value)){
//* {0,} 前面必须是空字符或者任意多个小写字母后面是5-8个数字,数字后面不能有任何东西
// if(/^[a-z]*[0-9]{5,8}$/.test(value)){
// +{1,} 前面必须至少有一个小写字母,可以有无数个小写字母,后面是5-8个数字,数字后面不能有任何东西
// if(/^[a-z]+[0-9]{5,8}$/.test(value)){
// ? {0,1} ?有或者没有都行,最多一个小写字母,后面是5-8个数字,数字后面不能有任何东西
if(/^[a-z]?[0-9]{5,8}$/.test(value)){
span.textContent="写对了";
span.style.color="green";
}else{
span.textContent="写的不对";
span.style.color="red";
}
} */
function judgeTxt(value){
// | 是依次匹配
// if(/^[1-9]$|^[12][0-9]$|^3[01]$/.test(value)){
if(/^[12]?[0-9]$|^3[01]$/.test(value)){
span.textContent="1-31匹配成功";
span.style.color="green";
}else{
span.textContent="1-31匹配不成功";
span.style.color="red";
}
}
/* setTimeout(function(传入的参数){
// 定时后执行的函数
},定时,传入的参数) */
</script>
</body>
</html>