码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript正则

时间:2019-10-01 18:02:06      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:下划线   length   一次函数   and   ade   efi   多少   元字符   put   


创建正则

1 let reg1 = /^\d+$/g;//=>字面量方式
2  let reg2 = new RegExp("^\\d+$", "g");//=>构造函数方式

 

两个斜杠之间的是"元字符",斜杠后面出现的都是“修饰符”

常用元字符

特殊元字符:

  • \d 0~9

  • \w “数字、字母、下划线”中的任意一个

  • \s 匹配任意一个空白字符(包括\t制表符[TAB键四个空格])

  • \b 匹配边界符 ‘zhu‘(z左边和u右边就是边界) ‘zhu-feng‘(z左边、u右边、f左边、g右边是边界)

  • \n 匹配一个换行符

  • \ 转义字符(把一个普通字符转义为特殊的字符,例如:\d,把有特殊含义的转换为普通意思

  • . 不仅仅是小数点,代表除了\n以外的任意字符

  • ^ 以某个元字符开头

  • $ 以某个元字符结尾

  • [xyz] x或者y或者z中的任意一个

  • [^xyz] 除了x\y\z以外的任意字符

  • [a-z] 获取a-z中的任意一个字符([0-9] 等价于\d ...)

  • () 正则分组

  • (?:) 当前分组只匹配不捕获

  • (?=) 正向预查

  • (?!) 负向预查

 

量词元字符(让其左边元字符出现多次)

  • ‘*‘ >=0

  • ‘?‘ [0,1]

  • ‘+‘ >=1

  • {n} n次

  • {n.} >=n次

  • {n,m} [n,m]

 

普通元字符

  • 只要在正则中出现的元字符(在基于字面方式创建),除了特殊和有量词意义的以外,其余的都是普通元字符

中括号的一些细节

  • 中括号中出现的元字符一般都是代表本身含义的

  • 中括号中出现的两位数,不是两位数,而是两个数字中的任意一个

    let reg = /^[12-65]$/;//这个正则的意思是 1或者2~6或者5

分组的作用

  • 改变的默认的优先级

  • 分组捕获

  • 分组引用

正则捕获exec

  • 如果当前正则和字符串不匹配,捕获的结果是NULL

  • 如果匹配,捕获的结果是一个数组

  • 0:大正则捕获的内容,后面的数字索引是匹配到的分组内容

  • index:正则捕获的起始索引

  • input:原始操作的字符串

  • EXEC只能捕获到第一个和正则匹配的内容(正则捕获的懒惰性,解决正则捕获的懒惰性,我们需要加全局修饰符G)

    let reg=/(\d+)abc/g;
    console.log(reg.exec(‘12abc23abc34‘));
    console.log(reg.exec(‘12abc23abc34‘));
    /* ["12abc", "12", index: 0, input: "12abc23abc34", groups: undefined]
    0: "12abc"
    1: "12"
    groups: undefined
    index: 0
    input: "12abc23abc34"
    length: 2
    __proto__: Array(0)
    --------------------------------------------------------------------------
    ["23abc", "23", index: 5, input: "12abc23abc34", groups: undefined]
    0: "23abc"
    1: "23"
    groups: undefined
    index: 5
    input: "12abc23abc34"
    length: 2
    __proto__: Array(0)*/

字符串匹配正则match

不加‘g‘:

let reg=/\d+/;
let str=‘12abc23abc34‘;
console.log(str.match(reg));
/*和正则捕获exec的结果一样
["12", index: 0, input: "12abc23abc34", groups: undefined]
0: "12"
groups: undefined
index: 0
input: "12abc23abc34"
length: 1
__proto__: Array(0)
 */

加‘g‘:

let reg=/\d+/g;
let str=‘12abc23abc34‘;
console.log(str.match(reg));
/*
(3) ["12", "23", "34"]
0: "12"
1: "23"
2: "34"
length: 3
__proto__: Array(0)
 */

replace

  • reg和 str匹配多少次,函数就被触发执行对少次,基于exec把每一次正则匹配到结果中的每一项,传递给函数执行

  • 每一次函数中返回的是啥,就把当前大正则匹配的内容替换成啥

    let reg=/(\d+)abc/g;
    let str=‘12abc23abc34‘;
    str=str.replace(reg,(...arg)=>{
        console.log(arg);/*匹配到两次
        ["12abc", "12", 0, "12abc23abc34"]
        ["23abc", "23", 5, "12abc23abc34"]
        */
        return ‘haha‘;
    });
    console.log(str);//hahahaha34

正则捕获贪婪性

正则捕获还具备贪婪性:每一次匹配捕获的时候,总是捕获到和正则匹配中最长的内容,把问号放到量词元字符后面,代表的就不是出现零次或者一次了,而且取消捕获的贪婪性

一些常用正则

  • 有效数字

    /^[+-]?(\d|([1-9]\d+))(\.\d+)?$/
  • 电话号码

    /^1\d{10}$/
  • 中文姓名

    /^[\u4E00-\u9FA5]{2,}(·[\u4E00-\u9FA5]{2,})?$/
    
  • 邮箱

    /^\w+([-.]\w+)*@[A-Za-z0-9]+([-.][A-Za-z0-9]+)*(\.[A-Za-z0-9]+)$/

JavaScript正则

标签:下划线   length   一次函数   and   ade   efi   多少   元字符   put   

原文地址:https://www.cnblogs.com/wangshouren/p/11615651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!