// 01JavaScript正则表达式的创建
// 1.字面量 /表达式/修饰符
var reg1=/abc/g;// 匹配一个字符串中是否包含abc g:global(全局)
console.log(reg1);
console.log(typeof reg1);//object
// 2.new关键字 构造函数
// var reg2=new RegExp("表达式","修饰符")
var reg2=new RegExp("abc","g");
console.log(reg2);
str="abcdefgabc";
console.log(str.match("abc"));
console.log(str.match(reg1));
// 02JavaScript正则表达式的方法
var reg1=/a/;
// constructor 对创建正则表达式对象的函数的应用
console.log(reg1.constructor);
// prototype 向对象添加属性和方法 原型
console.log(RegExp.prototype);
var str="abcabcabc";
var str2="ABCABCABC";
// 方法
// exec() 检索字符串中指定的值。返回找到的值,并确定其位置
console.log(reg1.exec(str));
console.log(reg1.exec(str2));//null
if(!reg1.exec(str2)){
console.log("没有找到匹配项")
}
// test() 检索字符串中指定的值。返回true或false
console.log(reg1.test(str));//true
console.log(reg1.test(str2));//false
// toString() 返回正则表达式的字符串
console.log(reg1.toString());
// 03JavaScript正则表达式的修饰符
// var reg1=/表达式/修饰符
// var reg2=new RegExp("表达式","修饰符")
var reg1=/a/;
var str1='abcabcabc';
var str2='ABCABCABC';
console.log(reg1.test(str1));//true
console.log(reg1.test(str2));//false
// i 忽略大小写 ignoreCase
var reg2=/a/i;
console.log(reg2.test(str2));//true
// 验证码 忽略大小写 Ab3G
var yzm=/Ab3G/i;
var yzm2="ab3g";
if(yzm.test(yzm2)){
console.log("验证码正确")
}else{
console.log("验证码错误")
}
// g 全局匹配 global
console.log(str1.replace(reg1,"H"));//Hbcabcabc
var reg3=/a/gi;
console.log(str1.replace(reg3,"H"));//HbcHbcHbc
console.log(str2.replace(reg3,"H"));
// m 多行匹配 multiline
var str3="abc\nabcabc";
var reg5=/a/gm;
console.log(str3.replace(reg5,"M"));
// 04JavaScript正则表达式的属性
var reg1=/a/igm;
// constructor 对创建正则表达式对象的函数的应用
console.log(reg1.constructor);
// prototype 向对象添加属性和方法 原型
console.log(RegExp.prototype);
// global 判断是否设置了 "g" 修饰符
// ignoreCase 判断是否设置了 "i" 修饰符
// multiline 判断是否设置了 "m" 修饰符
console.log(reg1.global);
console.log(reg1.ignoreCase);
console.log(reg1.multiline);
// source 返回正则表达式的匹配模式 表达式
console.log(reg1)
console.log(reg1.source)
// lastIndex 用于规定下次匹配的起始位置
var str="abcabcabc";
// console.log(reg1.test(str));
if(reg1.test(str)){
console.log(reg1.lastIndex);
}
while(reg1.test(str)){
console.log(reg1.lastIndex);
}
// 05JavaScript正则表达式的模式之范围 匹配符
// [字符族] 查找每个范围内的字符
var reg1=/acb/;
console.log(reg1.test("abcdefg"));//false
// [abc] 查找[]之间的任何字符
var reg2=/[acb]/;
console.log(reg2.test("a"));//true
console.log(reg2.test("ab"));//true
console.log(reg2.test("abdhehekeku"));//true
// [^abc] 查找任何不在[]之间的字符。 排除
var reg3=/[^acb]/;
console.log(reg3.test("a"));//false
console.log(reg3.test("acb"));//fasle
console.log(reg3.test("gghkyunguym,jkyuh"));//true
// [0-9] 查找任何从 0到9的数字
var reg4=/[0-9]/;
console.log(reg4.test("6789"));//true
var reg5=/[0-5]/
console.log(reg5.test("6789"));//false
// [a-z] 查找任何从小写 a 到 小写 z的字符
// [A-Z] 查找任何从大写 A 到 大写 Z的字符
// [A-z] 查找任何从大写 A 到 小写 z的字符
// (red|green|blue) 查找指定的选项 或
var reg6=/(a|b|c)/;
var reg7=/abc/;
var reg8=/([a]|[b]|[c])/;
console.log(reg6.test("hello a"));//true
console.log(reg7.test("hello a"));//false
// 06JavaScript正则表达式的模式之元字符
// 拥有特殊含义的字符 \
// . 查找单个字符,除了换行和行结束符以外的任意字符
var reg1=/./;
console.log(reg1.test("abcdefg"));//true
console.log(reg1.test("122345678"));//true
console.log(reg1.test("老韩"));//true
console.log(reg1.test("\n"));//false
// \w 查找数字、字母及下划线。
// \W 查找非单词字符。
var reg2=/\w/;
// var reg2=/\W/;
console.log(reg2.test("hagag0393838_"));//true
console.log(reg2.test("老韩"));//false
// \d 查找数字。
// \D 查找非数字字符。
// var reg3=/\d/;
var reg3=/\D/;
console.log(reg3.test("1234567890"));//fasle
// \s 查找空白字符。
// \S 查找非空白字符。
// \b 匹配单词边界。
// \B 匹配非单词边界。
// \0 查找 NULL 字符。
// \n 查找换行符。
// \f 查找换页符。
// \r 查找回车符。
// \t 查找制表符。
// \v 查找垂直制表符。
// \xxx 查找以八进制数 xxx 规定的字符。
// \xdd 查找以十六进制数 dd 规定的字符。
// \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。
// 十六进制 0123456789ABCDEF
console.log("一".charCodeAt(0));//19968 十进制
// 中文 [\u4e00 -\u9fef]
// 4e00 0 0 14*16*16*16 4*16*16*16*16
var reg6=/[\u4e00-\u9fef]/;
console.log(reg6.test("韩"))
// 07JavaScript正则表达式的模式之量词 限定符 {}
// n{X} 匹配包含 X 个 n(连续) 的序列的字符串。
// 例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的两个 "a",且匹配 "caaandy." 中的前两个 "a"。
var reg1=/a{3}/;
console.log(reg1.test("a"));//true
console.log(reg1.test("aa"));//true
console.log(reg1.test("aaab"));//true
console.log(reg1.test("aaba"));//fasle
console.log(reg1.test("aaaa"));//true
console.log("aaaaa".replace(reg1,"A"));//Aaa
console.log("1---------------------------------")
// n{X,Y} X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。
// 例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 "a",匹配 "caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即使原始字符串拥有更多的 "a",匹配项也是 "aaa"。
var reg2=/a{3,5}/;
console.log(reg2.test("a"));
console.log(reg2.test("aa"));
console.log(reg2.test("aaa"));
console.log(reg2.test("aaaa"));
console.log(reg2.test("aaaaa"));
console.log(reg2.test("aaaaaa"));//true
console.log("aaaaaaa".replace(reg2,"M"));//Maa
// n{X,} X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。
// 例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。
// n+ 匹配任何包含至少一个 n 的字符串。 n{1,}
// n* 匹配任何包含零个或多个 n 的字符串。 n{0,}
// n? 匹配任何包含零个或一个 n 的字符串。 n{0,1}
var regx=/a+/;
console.log("aaaaa".match(regx));
var regy=/a\+/;
console.log(regy.test("a+"));
// 08JavaScript正则表达式的模式之定位符
// n$ 匹配任何结尾为 n 的字符串
var reg1 = /abc$/; //匹配以abc结尾的字符串
console.log(reg1.test("abcabc"));
// ^n 匹配任何开头为 n 的字符串
var reg2 = /^abc/; //匹配以abc开头的字符串
console.log(reg2.test("cabcabc"));
// var reg3=/^[^]/
var url = "http://www.baidu.com";
var regx = /^http:\/\/w{3}\.[\w]{1,}\.[A-z]$/;
var regy = /^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([\w]+)\.)+([A-z])+$/
// ?=n 匹配任何其后紧接指定字符串 n 的字符串。
// ?!n 匹配任何其后没有紧接指定字符串 n 的字符串。
var reg8=/ab(?=a)/gi;
var reg9=/ab(!=a)/gi;
// console.log("abacabc".match(reg8));
// console.log("abcabc".match(reg9));