正则表达式用于定义字符串的规则,计算机可根据正则表达式来判断字符串是否符合规则,获取字符串中符合规则的内容。
创建正则表达式对象
语法:
var 变量=new RegExp("正则表达式","匹配规则")
另外, 在构造函数中可以传递一个匹配模式作为第二个参数,可以是:

  • i 忽略大小写
  • g 全局匹配模式

例:

var reg=new RegExp("a","i");
var str="a";
/*
* 正则表达式方法:
*    test()可以用来检测字符串是否符合正则表达式规则
*/
var result=reg.test(str);
console.log(result);//true
console.log(reg.test("A"));//true

使用字面量来创建正则表达式
语法:
var 变量= /正则表达式/匹配模式
使用字面量的方式创建更加简便。
例:

var reg=/a/i;
console.log(typeof reg);
console.log(reg.test("abc"));
//创建一个正则表达式检查字符串是否有a或b
//使用|表示或的意思
var reg=/a|b/;
console.log(reg.test("ab"));
//创建一个正则表达式判断是否有字母
// [ab]=a|b,两个写法一样
// [a-z]表示任意小写
// [A-z]表示任意字母
// [0-9]表示任意数字
var reg=/[a-z]/;
console.log(reg.test("adaef"));
//检查一个字符串中是否有abc或adc或aec
var reg=/a[bde]c/;
console.log(reg.test("abc"));
//检查字符串中有没有除中括号以外的字符
// /[^ab]/表示除了ab都可匹配
// /[^0-9]/表示除了数字
var reg=/[^\[\]]/;
console.log(reg.test("[][]55"));//true

正则表达式的其他语法

  • 量词

设置可以出现的次数,语法:/a{连续出现次数}/
例如:/a{3}/等于/aaa/

注意量词只对前面一个字符起作用,要对多个字符起作用可以加上()。

例如:/ab{3}/等于/abbb/,/(ab){3}/等于/ababab/
其他扩展用法:
/ab{1,3}c/表示b可出现一到三次都行
/ab{m,}c/表示b可出现m次以上都行
/ab+c/表示至少有一个b ,相当于/ab{1,}c/
/ab*c/表示有没有b都行,也可很多个b
/ab?c/表示0个或1个b都行 相当于{0,1}

var reg= /ab{3}/;
console.log(reg.test("abb"));//false
  • 检查一个字符串开头结尾

^a表示以a开头

注意与[^a]区别,这个表示除a以外。而^a表示以a开头

a$表示以a结尾
另外,^a$表示开头结尾都是a,且只能是a,就是只有字符串"a"才满足,所以在正则表达式中同时使用^ $,则要求字符串完全满足正则表达式。

//判断开头或结尾是a
var reg= /^a|a$/;
console.log(reg.test("asfa"));//true
//判断手机号
var phoneStr="15541609706";
var phoneReg=/^1[3-9][0-9]{9}$/;
console.log(phoneReg.test(phoneStr));//true
//判断电子邮件
            /*
             * 电子邮件
             *     例如:
             *       heng.top@qq.com
             *       任意数字字母下划线和. @  任意字母数字 . 任意字母(2-5位 )
             * 
             * \w{3,} (\.\w+)*@[A-z0-9]+ (\. [A-z]{2,5}){1,2} 
             */
            var emailReg=/^\w{3,}(\.\w+)*@[A-Za-z0-9]+(\.[A-Za-z]{2,5}){1,2}$/;
            var email="heng.top@qq.com";
            
            console.log(emailReg.test(email)); 
  • 其他语法

              /*
               *  检查字符串中是否有.
               *  但是 . 表示任意字符 ,在正则中用\表示转义,所以 \. 表示 .
               * 
               * 注意使用构造函数时,其参数是一个字符串,而\是字符串的转义字符
               * 所以要使用\则需要使用\\来代替
               *  \w 任意字母 数字和_ 
               *  \W 除了字母 数字和_
               *  \d 任意的数字[0-9]
               *  \D 除了数字[0-9]
               *  \s 空格
               *  \S 除了空格
               *  \b 单词边界(就是你能把它看成个单词)
               *  \B 除了单词边界(就是你不能把它看成个单词)
               */
    
    //创建一个正则表达式检查一个字符串检查一个字符串是否含有单词child
    var reg=/\bchild\b/;
    console.log(reg.test("hello child "));
    //接受一个用户的输入并去除空格,为了防止输入空格,可以用空串""来替换    
    var str=prompt("请输入你的用户名:")
    //去除开头结尾的空格, 把+改为*都行。
    str=str.replace(/^\s+|\s+$/g,"");
    console.log(str);
    

字符串与正则

  • split()

将字符串拆分为数组, 该方法会 全局(不用指定全局匹配g) 进行拆分,参数可以传一个正则表达式。

//根据任意字母来拆
var str="1aaa2b3c4d5e6f";
var result=str.split(/[A-z]/);
console.log(result);
  • search()

可以搜索字符串中是否有指定内容,会返回指定字符串第一次出现的索引,该方法没有全局匹配所以g对其无效,如果没有找到指定的内容则返回-1,还可接受正则表达式做为参数。

var str2="hello abc hello aec afc";
result=str2.search(/a[bef]c/);
console.log(result);
  • match()

可以根据正则表达式,从一个字符串中将符合条件内容提取出来,默认条件下match只会找到第一个符合条件的内容,找到后就停止检索,我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容,match()会将结果封装到一个数组中返回。

var str="1a2b3c";
var result=str.match(/[A-z]/g);
console.log(result);
  • replace()

replace()可以将字符串中指定的内容替换为新的内容。
参数:
1.被替换的内容,可以接受正则。
2.新的内容。
默认只替换第一个,所以要全替换就要设置全局

var str="1a2a3a4aca";
result=str.replace(/a/g,"gg");
 console.log(result);
Last modification:April 11, 2020
如果觉得我的文章对你有用,请随意赞赏