正则表达式的基础
用于定义一些字符串的规则:
计算机可以根据正则表达式,来检查一个字符串是否符合规则;获取将字符串符合规则的内容提取出来;
/*创建正则表达式的对象
语法:
var 变量 = new RegExp("正则表达式","匹配模式");
使用typeof检查正则对象,会返回object
在构造函数中可以传递一个匹配模式作为第二个参数,
可以是
i 忽略大小写
g 全局匹配模式
*/
var reg = new RegExp("a");
console.log(typeof reg);//object
/*
正则表达式方法 test()方法
用来检查一个字符串中是否符合正则表达式,如果含有就返回true
*/
var str = "a";
var result = reg.test(str);
console.log(result);//tru
console.log(reg.test("A"));//false
console.log(reg.test("b"));//fals
console.log(reg.test("ab"));//true
var reg = new RegExp("a", "i");
console.log(reg.test("A"));//true
使用字面量来创建正则表达式-不能写变量(不灵活)
// var 变量 = /正则表达式/匹配模式;
var reg = /a/i;
//检查字符串中有a或b,用竖线或中括号表示
var reg = /a|b/;
console.log(reg.test("aggg"));//true
var reg = /[ab]/;
console.log(reg.test("sdbfdf"));//true
//检查字符串中有字母
//任意字母[A-z]
var reg = /[a-z]/;
console.log(reg.test("rdivggg"));//true
//检查一个字符串中是否含有abc,acc,aec
var reg = /a[bce]c/;
//检查一个字符串中除了一个ab以外的字符
var reg = /[^ab]/;
//检查一个字符串中除了数字以外的字符
var reg = /[^0-9]/;
字符串和正则表达式相关的方法
//split() 根据任意字母去拆分 默认全局匹配
var str = "1s2v4c4u19j8";
var result = str.split(/[A-z]/);
console.log(result);//['1', '2', '4', '4', '19', '8']
//search() 搜索第一个abc 或afc的位置 不会全局匹配
var str1 = "hello abc hello afc";
var result1 = str1.search("a[bf]c");
console.log(result1);//6
/*match()
- 可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
- 默认情况下我们的math只会找到第一个符合条件要求的内容,找到以后就会停止检索
我们可以设置正则表达式为全局模式,这样就会匹配到所有的内容
-
*/
var str = "a12edaAFG45DA12asx";
// result = str.match(/[A-z]/g);
result = str.match(/[a-z]/gi);
console.log(result);//['a', 'e', 'd', 'a', 'A', 'F', 'G', 'D', 'A', 'a', 's', 'x']
/*replace()
- 可以将字符串中国指定的内容替换成新的内容
- 参数:
1.被替换的内容,可以接受一个正则表达式作为参数
2.新的内容
- 默认只替换第一个
*/
var str = "a12edaAFG45DA12asx";
result = str.replace("a", "@");
console.log(result);//@12edaAFG45DA12asx 只讲第一个a替换成@
result = str.replace(/a/ig, "@");
console.log(result);//@12ed@@FG45D@12@sx 将a或A替换成@
result = str.replace(/[a-z]/gi, "");
console.log(result);//124512 去除字母
当连续出现的内容次数较多时,用量词
//创建一个正则表达式检查一个字符串是否含有6个连续的a
//通过量词可以设置一个内容出现的次数 {n次数} 只对前面的一个字符
var reg = /a{6}/;
console.log(reg.test("12aaaaaabc"));//true
var reg1 = /ab{3}/;//d等价于abbb
console.log(reg1.test("ababab42"));//false
console.log(reg1.test("abbb908se"));//true
var reg2 = /(ab){3}/;
console.log(reg2.test("ababab13"));//true
var reg3 = /ab{1,3}c/;//b出现1-3次
console.log(reg3.test("abbc"));//true
var reg4 = /ab{3,}c/;//b出现3次以上
console.log(reg4.test("abbbc"));//true
console.log(reg4.test("abbbbbbc"));//true
var reg5 = /ab+c/;//b至少一次 等于ab{1,}c
console.log(reg5.test("ac"));//false
console.log(reg5.test("abc"));//true
console.log(reg5.test("abbbbc"));//true
var reg6 = /ab*c/; //等于ab{0,}c >=0次
var reg7 = /ab?c/; //等于ab{0,1}c 0或1次
开头和结尾
//检查以a作为开头
var reg = /^a/;
console.log(reg.test("a1bde"));//true
//检查以b作为结尾
var reg1 = /b$/;
console.log(reg1.test("1afgb"));//true
//只有a
var reg2 = /^a$/;
console.log(reg2.test("a"));//true
//以a作为开头或结尾
var reg3 = /^a|a$/;
console.log(reg3.test("a12"));//true
console.log(reg3.test("21ra"));//true
//验证是否为手机号,1开头,第二位是3-9的数,第3到11位是任意数字,共11位
var phoneStr = "13787125959";
var phoneReg = /^1[3-9][0-9]{9}$/;
console.log(phoneReg.test(phoneStr));//true
转义字符
- \.来表示.
- \\表示\
//检查一个字符串是否含有.
//.表示任意字符 要用转义字符 \.
var reg = /\./;
console.log(reg.test("sdfefew"));
\w 表示任意数字、字母、_
\W 表示除了字母、数字、_
\d 任意的数字
\D 除了数字
\s 空格
\S 除了空格
\b 单词边界
\B 除了单词边界
reg = /\bchild\b/;
console.log(reg.test("hellochild"));//false
console.log(reg.test("hello child"));//true
//接受一个用户的输入
var str = prompt("请输入您的用户名");
//去除开头和结尾字符串的空格
str = str.replace(/^\s*|\s*$/g, "");
console.log(str);
/*
电子邮件
hello @ abc.com.cn
任意字母数字下划线点任意字母数字下划线@任意字母数字 点字母2-5位 点字母2-5位
\w{3,} (\.\w+)* @ [A-z0-9]+ (\.\[A-z]{2,5}){1,2}
*/
var emaiReg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
var email = "2281818@qq.com";
console.log(emaiReg.test(email));//true