什么是正则表达式?

正则表达式是由一个字符序列形成的搜索模式。

当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。

正则表达式可以是一个简单的字符,或一个更复杂的模式。

正则表达式可用于所有文本搜索和文本替换的操作。

基础语法

第一种:字面量语法

var expression=/pattern/flags;

第二种:RegExp构造函数语法

var pattern = /\w/gi;  //字面量语法
var pattern = new RegExp('\\w', 'gi');//构造函数语法,这两者是等价的

这里有个注意点就是:如果正则表达式是动态的话,只能选择第二种。

其中的flags有3个标志

  • g:表示全局模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止;
  • i:表示不区分大小写模式,即在确定匹配项时忽略模式与字符串的大小写;
  • m:表示多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。

当然还有其他的flags,用到的极少,不做过多阐述。

常用方法

  1. test()

    用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。

    实例:

    const patt = /e/;
    patt.test("The best things in life are free!")
    

    字符串中含有 “e”,所以该实例输出为:

    true
    

    你可以不用设置正则表达式的变量,以上两行代码可以合并为一行:

    /e/.test("The best things in life are free!")
    
  2. search()

    搜索相应的字符串第一次出现的索引位置,如果未找到,则返回-1

    实例:

    使用正则表达式搜索 “Runoob” 字符串,且不区分大小写:

    const str = "Visit Runoob!"; 
    const n = str.search(/Runoob/i);
    

    结果输出为:

    6
    
  3. match()

    返回匹配的数组

    • 如果正则表达式包含一个 g 标记,即为全局匹配,它将返回一个包含所有匹配项的数组,没捕获组信息;
    • 如果正则表达式没有 g 标记,它将返回一个包含第一个匹配项和其相关的捕获组的数组;
    • 如果根本没有匹配项,则返回 null 。

    实例:

    const strText = "Hello China";
    const regex = /[A-Z]/g; // 大写字母正则表达式
    console.log(strText.match(regex)); // [ 'H', 'C' ]
    
  4. replace()

    匹配相应的字符串,然后将其替换成其他字符串

    实例:

    使用正则表达式且不区分大小写将字符串中的 Microsoft 替换为 Runoob :

    var str = document.getElementById("demo").innerHTML; 
    var txt = str.replace(/microsoft/i,"Runoob");
    

    结果输出为:

    Visit Runoob!
    

常用的正则

邮箱

/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/

手机号

/1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}/

座机电话

/\d{3}-\d{8}|\d{4}-\d{7}/

身份证

/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/

邮政编码

/^[1-9][0-9]{5}$/

2-4位中文名

pattern: /^[\u4E00-\u9FA5]{2,4}/

昵称 用户名 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线组合

/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/

微信号,6至20位,以字母开头,字母,数字,减号,下划线

/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/
11-23 10:27