JS基础笔记-关于正则表达式

113 阅读3分钟

正则表达式的基础

用于定义一些字符串的规则:

计算机可以根据正则表达式,来检查一个字符串是否符合规则;获取将字符串符合规则的内容提取出来;

    /*创建正则表达式的对象
    语法:
    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