#正则表达式
用来匹配一类数据的模式
语法:
1、new RegExp(n)
n:表示需要匹配的模式
2、/n/
n:表示需要匹配的模式
var reg1 = new RegExp("a");
//^,表示匹配以什么开头
//$,表示匹配以什么结尾的字符串
var reg2 = /^a$/;
console.log(reg1);
var str = "bacd";
console.log(reg1.test(str));//true
console.log(reg2.test(str))//false
var str1 = "bcd";
console.log(reg2.test(str1));//false
var str2 = "abda";
console.log(reg2.test(str2));//false
var reg =/[0-9]/;
var str = "123";
console.log(reg.test(str));//true
var reg =/^[0-9]$/;
var str1 = "123";
console.log(reg.test(str1));//false
//匹配一个四位数的验证码
// | 表示或
var reg = /^[0-9][0-9][0-9][0-9]$/
var reg1 = /^[0|9][0-9][0-9][0-9]$/
var str ="1234";
console.log(reg.test(str));//true
console.log(reg1.test(str));//45
var str1 ="12346";
console.log(reg.test(str1));//false
//匹配手机号码
var reg = /^1[3-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$/;
var str = "13124975877";
console.log(reg.test(str));//true
#方括号
用于匹配某个范围内的字符
[0-9]:数值类型
[a-zA-Z]:字母类型
[a-z]:小写
[A-Z]:大写字母
[^a-z]:除了小写字母之外的字符 => ^符号在括号里面表示非。
var reg =/^[^a-z]$/;
var str ="a";
console.log(reg.test(str));//false
var str1 ="1";
console.log(reg.test(str1));//true
var str = "今天的天气真好!";
var nstr = str.replace("天","日");
console.log(nstr);
修饰符
i:不区分大小写
m:识别换行符
g:代表全局匹配
var str2 = str.replace(/天/g,"日");
console.log(str2);
var str = "hello worLd";
console.log(str.replace(/l/ig,"z"));//hezzo worzd
元字符
相当于
↓
\d:表示一个数字 => [0-9]
\D:表示非数字 => [^0-9]
\w 单词字符 => [a-zA-Z0-9_]
\W 非单词字符 => [^a-zA-Z0-9_]
\s 查找一个空白字符(比如空格,换行符…这些看不见的符号)
\S 非空白字符
\b 单词边界
\B 非单词边界
. 表示任意字符,除了换行符(\n),结束符(\r);
var reg = /\d/;
var str = "1234";
console.log(reg.test(str));//true
var reg =/\D/;//只有存在一个非数值类型字符,则返回true
var str = "1zs";
console.log(reg.test(str));
var reg = /\w/;
var str1 = "天";
console.log(reg.test(str));//true
console.log(reg.test(str1));//false
var str = " ";
var reg = /\s/;
if(reg.test(str)){
console.log("请不要输入空格");
}
var str = "hwow old are you?";
var reg = /w\b/;//匹配一个在单词右边界上的w
console.log(str.match(reg));//["w", index: 3, input: "hwow old are you?", groups: undefined]
console.log(str.replace(/w\b/,"W"))//hwoW old are you?
var str = "hell! how old are youh? what?";
var reg = /\bh/g;//匹配一个在单词左边界上的h
console.log(str.replace(reg,"H"));//Hell! How old are you? what?
console.log(str.replace(/\Bh\B/g,"H"));//hell! how old are youh? wHat?
var reg = /./;
var srt1 = "12fadad是";
var str2 = "\n";
var str3 = "\r啦啦啦啦";
console.log(reg.test(str1));//true
console.log(reg.test(str2));//false
console.log(reg.test(str3));//true
#量词
{n}表示有n个
{n,m}表示有n~m个
{n,}表示大于等于n个
? 表示0个或一个 =>{0,1}
加号 + 表示一个或多个 =>{1,}
表示0个或多个 =>{0,}
//匹配手机号码
var reg = /^1[3-9]\d{9}$/;
var str ="13265973867";
console.log(reg.test(str));//true
var reg = /^\d{4,6}$/;
var str1="1234";
console.log(reg.test(str1));//true
var reg =/^\d{6,}$/;
var str = "12345";
console.log(reg.test(str));//false
var reg = /^\d.?$/;//表示匹配数字后面跟着一个或者0个任意字符
var str = "11";
console.log(reg.test(str));//true
var reg = /^\d+$/;//表示匹配一个或多个数字
var str = "122";
console.log(reg.test(str));//true
var reg = /^.*$/;//表示匹配0或多个字符
var str = "3345bv";
console.log(reg.test(str));//true
#正则表达式的方法
1、test()用来匹配正则表达式中指定的字符,返回布尔值。
2、exec()匹配字符串中指定的值,并返回该字符和该字符所在的下标值。
注意:该方法只能匹配一次只能获取到第一个目标字符
如果要匹配到所有字符,需要全局匹配然后在进行多次匹配,就能后获取到所有目标字符。
例如
var str = "今天天气晴朗,我们来上课了!";
var reg = /天/g;
console.log(reg.exec(str));//"天", index: 1, input: "今天天气晴朗,我们来上课了!"
console.log(reg.exec(str));//"天", index: 2, input: "今天天气晴朗,我们来上课了!"
3、toString(),不是用来匹配的
返回正则表达的字符串
var str = "今天天气晴朗,我们来上课了!";
var reg = /天/g;
console.log(reg.exec(str));
console.log(reg.exec(str));
var reg = /我们来上课了/;
console.log(reg.toString());// /我们来上课了/
字符串中具有正则匹配的方法:
1、replace()
2、match():找到一个或多个正则表达的匹配, 返回包含目标字符的一个数组
3、search():检索与正则表达式相匹配的值。返回第一个出现目标元素的下标值
4、split()把字符串分割为字符串数组
var reg = /天/g;
console.log(str.match(reg));
console.log(str.search(reg));
console.log(str.split(/,/));
高级应用 =>反向引用
如果我们需要用到匹配的数据
可以在匹配模式的数据上添加一个小括号
小括号里面的值可以通过$加数字来拿到第一个括号里面的内容用加数字1,第二个括号里面的内容用数字2,第三个括号…3,以此类推
比如
/(.{3})/g =>"$1 "
/(.{3}(\d))/g => $1 $2
var str = "123abc789"; //==> 123 abc 789
var newstr = str.replace(/(.{3})/g,"$1 ");//123 abc 789
console.log(newstr);