正则表达式

正则表达式

1.定义

  • 对字符串进行描述的

2.作用

  • 表单验证
  • 验证 邮箱/电话/邮编......
  • WEB编辑器
  • 爬虫、数据抓取、小偷程序

3.定义正则表达式

  • 直接量
  • 函数
  • 构造函数

正则表达式基础

1.原子

  • 正则表达式的最小组成单位
  • 普通的字母、数字、符号都是原子
  • 转义字符
  • 字符类

2.字符直接量(原子)

  • 原子的重要组成
  • 普通的字母、数字、符号
  • \n
  • \t
  • \r
  • \v
  • \f
  • \
  • \b 退格符
  • \x00
  • \u0000
  • \unicode编码
  • 正则表达式里面具有特殊意义的字符 需要转义

3.字符类(原子)

  • \d 数字 [0-9]
  • \D 除了数字之外的字符 [^0-9]
  • \w 数字、字母、下划线 [0-9a-zA-Z_]
  • \W 除了数字、字母、下划线 之外的字符 [^0-9a-zA-Z_]
  • \s 空白符 [\n\t\v\r\f ]
  • \S 除了空白符之外的字母 [^\n\t\v\r\f ]
  • . 除了换行外所有的字符 [^\n\r]
  • [...]
  • [^...]
  • [\b] 匹配退格符

4.重复(对原子的数量修饰)

  • + 表示前面原子出现1次或多次

  • 表示前面原子出现0次或1次

  • *表示前面的原子出现0次1次或多次 任意次

  • {m} 前面的原子出现m次

  • {m,n}前面的原子出现m到n次

  • {m,} 前面出现的原子个数m次以上

  • 正则默认会贪婪匹配,阻止贪婪匹配在数量修饰符的后面 加?

    var reg = /\w+e/;
    var reg = /\w+?e/;
    var str = "orangeapple";

    console.log(reg.exec(str));

5.指定匹配出现的位置(对原子位置的修饰)

  • \b 单词边界

  • \B 不是单词边界

  • ^ 字符串开始边界

  • $ 字符串结束边界

  • 先行断言(正向预查) (?=)

    console.log(/apple(orange)/.exec("appleorange"))
    console.log(/apple(?=orange)/.exec("appleorange"));
    console.log(/apple(?=orange)/.exec("orangeapple"));//null
    console.log(/apple(?!orange)/.exec("orangeapple"));
    console.log(/apple(?!orange)/.exec("appleorange"));//null
    console.log(/apple(?!orange)/.exec("appleab"));

  • 负向先行断言(负向预查) (?!)

    console.log("");
    console.log(/(?=p)apple/.exec("apple"));//null
    console.log(/(?=p)apple/.exec("papple"));//null
    console.log(/apple(?=p)/.exec("applep"));//["apple", index: 0, input: "applep"]
    console.log(/^apple(?=p)$/.exec("applep"));//null

正向:
(?=exp) 零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式。
(?<=exp) 零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式。
负向:
(?!exp) 零宽度负预测先行断言,它断言此位置的后面不能匹配表达式。
(?<!exp) 零宽度负回顾后发断言,它断言此位置的前面不能匹配表达式。

6.模式单元 ()

  • 改变优先级

    //改变优先级
    console.log(/apple|orange/.test("apple"));
    console.log(/appl(e|o)range/.test("apple"));
    console.log(/appl(e|o)range/.test("applorange"));
    console.log("");
    /*控制台输出
    true
    false
    true
    */

  • 把多个原子当做一个原子

    //把多个原子当做一个原子
    console.log(/abc{4}/.test("abcccc"));
    console.log(/(abc){4}/.test("abcccc"));
    console.log(/(abc){4}/.test("abcabcabcabc"));
    /*
    true
    false
    true
    */

  • 把模式单元匹配的内容暂存内存 (?😃 可以取消暂存内容

    //模式单元的内容会 单独存储到内存中
    console.log(/abc/.exec("123abc123abc"));
    console.log(/a(b)c/.exec("123abc123abc"));
    console.log(/(ab)c/.exec("123abc123abc"));
    console.log(/(ab)(c)/.exec("123abc123abc"));
    console.log(/(ab)(?:c)/.exec("123abc123abc"));

  • 暂存内存的内容可以被反向引用

7.修饰符(模式修正符)

  • i 正则表达式不区分大小写

    // i 不区分大小写
    console.log(/^aAbB$/.test("aabb"));//false

    console.log(/^aAbB$/i.test("aabb"));//true

  • m 允许多行(换行被当做字符串结束符)

    // m 多行模式 字符串边界
    console.log(/^a/.exec("orange\naplle"));//null
    console.log(/^a/m.exec("orange\naplle"));
    console.log(/\w$/m.exec("orange\naplle"));
    console.log(/\w$/.exec("orange\naplle"));

  • g 全局匹配

正则的使用

1.RegExp对象

  • test() true/false
  • exec() 数组/null

2.String对象

  • search() 匹配成功(第一次满足正则的位置) 匹配失败(-1)

    //search
    console.log("abc123".search(/\d{2}/));//3
    console.log("abc123".search(/^\d{2}/));//-1

  • match() 匹配成功(返回数组 全局匹配影响) 失败(null)

    //match
    console.log("1abc34io".match(/[a-z]{2}/));//["ab", index: 1, input: "1abc34io"]
    console.log("1abc34io".match(/a-z/));//["c3", "3", index: 3, input: "1abc34io"]
    console.log("1abc34io".match(/[a-z]{2}/g));//["ab", "io"]
    console.log("1abc34io".match(/[a-z]{9}/g))//null

  • replace() 替换

    //replace
    console.log("hellolelabc".replace("l","艾尼"));//he艾尼lolelabc
    console.log("hellolelabc".replace(/l/g,"艾尼"));//he艾尼艾尼o艾尼e艾尼abc
    console.log("hellolelabc".replace(/\w/g,"艾尼"));//艾尼艾尼艾尼艾尼艾尼艾尼艾尼艾尼艾尼艾尼艾尼

  • split() 把字符串分割为数组

    //split
    var message="jin.jack,rack,rose,tom.lili,yanyan";

    console.log(message.split(","));//["jin.jack", "rack", "rose", "tom.lili", "yanyan"]
    console.log(message.split(/[,.]/));//["jin", "jack", "rack", "rose", "tom", "lili", "yanyan"]

判断邮箱var email=/[1]{1,12}@[\w.]{1,10}[\w]{1,5}$/;

判断密码var password=/[\w_]{6,18}/;

判断用户名var username=/[a-zA-Z_\w]{4,16}/;

实现 在表单中输入 银行卡 自动加4位加空格;





  1. \w ↩︎

posted @ 2017-08-28 08:15  不完美的完美  阅读(324)  评论(0)    收藏  举报