JavaScript入门笔记-正则表达式篇

文章目录

  • 字面量创建
  • 常用格式
  • 量词
  • 字符串与正则表达
  • 元字符,转义字符
  • 例子


正则表达式用于检查一个字符串是否符合规则,比如邮箱格式、电话号码格式。。。 或提取符合规则的内容

//语法
// var 变量 = new RegExp("表达式","匹配模式");
var reg  = new RegExp("a");//检查字符串中是否有a,严格区分大小写


var str = "abcd";  
var result = reg.test(str);
console.log(result);

匹配模式:
i:忽略大小写
g:全局模式
可同时存在没有先后


字面量创建

//这两句是一样的
var reg = /a/i;  
    reg = new RegExp("a","i");

与之前不同,正则表达式字面量创建虽然简单但并不灵活

常用格式

一些常用的匹配模式

var reg = /a|b/;    //a或b
    reg = /[ab]/;   //a或b
    reg = /[a-z]/;  //所有小写字母
    reg = /[A-z]/;  //任意字母;注:a大写z小写
    reg = /[0-9]/;  //任意数字
    
    reg = /a[bd]c/; //abc或adc
    
    reg = /[^ab]/;  //不含a或b
    
    reg = /^a/;     //检查开头是否有a
    reg = /a$/;     //检查结尾
    reg = /^a$/;    //完全符合^&内部条件;本例只有字符串中只有a才为true

量词

var reg =/a{3}/;    //aaa
    reg = /ab{3}/;  //abbb
    reg =/(ab){3}/;//ababab
    
    reg = /ab{1,3}c/;//abc,abbc,abbc,都可以
        //即{最低出现次数,最高出现次数}(最高可不写)
        //{}仅对相邻有效,字符串需加()

字符串与正则表达

var str ="1234c5678c";
var result = str.split("c");    //根据字符拆分字符串为数组,不包含标志字符
    result = str.search("c");   //返回字符第一次出现位置没有返回-1  
    result = str.replace("c","@_@");//替换第一个目标字符,可传入空串(即删除)

/*
结合正则表达的例子
*/
    result = str.split(/[A-z]/);//根据任意字母拆分 (默认全局) 
    result =str.search(/[A-z]/);//检查字符串中目标首次出现位置(不支持全局)
    result = str.match(/[A-z]/g);//返回字符串中符合规则字符串
                                //不写g(全局搜索)会只返回一个
    result = str.replace(/[a-z]/g,"@");//全局替换
    


元字符,转义字符

有的字符(或反斜线前缀字符)有特殊含义,被称为元字符;
例如’.’(表示搜索任意字符)
在特殊字符前加反斜线表示单纯字符例如(\ .)

var reg = /./;  //是否含有任意字符
    reg = /\./; //是否含有.
    reg = /\\/; //是否含有\(反斜线也是特殊字符)
    
    reg = reg.replace(/^\s*/); //去除字符串前面所有空格
    //^表示开头;\s表示元字符空格;*表示没有或多个(+表示一个以上)

注:构造函数与字面量不同,要多写入一个反斜线

例子

检查字符串是否为电话号码

目前我国使用的手机号码为11位,其中各段有不同的编码方向:
前3位:网络识别号 第4~7位:地区编码 第8~11位:用户号码
电话号码编码规则:
国家代码 + 地区代码 + 电话号码(服务商代码 + 4位用户号码)
固定电话由电信部门制定。

规则:以1开头,特殊部门占用第二位的012,总长度11位

即:开头为1(/^1)
第二位3-9的数字([3-9])
余下9位为0-9数字, 结 尾 限 制 长 度 ( [ 0 − 9 ] 9 结尾限制长度([0-9]{9} [09]9

正则表达:/^1 [3-9] [0-9]{9}$/
虽然字面量传入不明显但实际//之间传入的是字符串,所以不能有空格


<script>
    var phoneNu = "15344455566";
    var phoneReg = /^1[3-9][0-9]{9}$/;//内部不能有空格
    console.log(phoneReg.test(phoneNu));//控制台打印
script>

字符串必须完全符合格式,因此,这段表达式不能从一个长字符串提取电话号码


检查格式是否为邮箱

登录名@主机名.域名

规则:任意字母数字下划线字符串**.**任意任意字母数字下划线(这部分通常省略)@任意字母数字.任意字母.任意字母

即:以字符串开头(长度一个以上字符)(\w+);
可有可无的二级登录名包括点和任意字符串(\ .\w+)*
@符号;
字母数字组成的主机名([A-z0-9]+);
域名例如常见的 .com .cn(\ .[A-z]{2,5}){1,2}

正则表达/\w+ (\ .\w+)*@[A-z0-9]+(\ .[A-z]{2,5}){1,2}/
这个例子还告诉我们文档注释的重要性

    var email = "[email protected]";
    var emailReg = /\w+(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}/;
    console.log(emailReg.test(email));

去除空格
本着尽可能利用已有资源的原则str.trim()可以直接实现 我们想要的功能,但在翻过JS的String类后并没有找到这个方法,最终发现这个方法是jQuery的

var str = "    hello      ";
    console.log(str);
        str = str.replace(/\s/g,"");//全局替换全部空格为空串
                                    //空格为特殊字符以字面量代替
    console.log(str);

你可能感兴趣的:(JavaScript)