正则

作者: Kyle_kk | 来源:发表于2017-11-03 12:20 被阅读0次

    //正则:就是以个规则 用来处理字符串的一个规则

    var reg =/\d/;

    reg.exec("1"); //匹配符合的

    //2如何创建一个正则

    //字面量方式:

    var reg = /\d/;

    //实例创建方式:

    var reg = new RegExp("");

    //元字符

    每一个正则表达式都是由元字符和修饰符组成的

    元字符在 // 之前具有意义的一些字符

    \: 转义 字符, 转义后面字符所代表的含义

    ^: 某一个元字符开始

    $:某一个元字符结尾

    //代表出现次数的量词元字符

    *:出现零到多次

    +:出现1到多次

    ?:出现零次 或者一次

    {n}: 出现n次

    {n,}: 出现n到多次

    {n,m}: 出现 n到 m次

    \n :匹配一个换行符

    . : 除了\n以外的任意字符

    一个简单的验证手机号的正则:11位数字,第一位是1

    var reg = /^1\d{10}$/

    ():分组 - >把一个大正则本身划分成几个小的正则

    1)改变默认的优先级

    var reg = /^18 |19$/       //189    119   19 

    var reg = /^(18 |19)$/     //18 19

    2)

    var reg = /^(\d+)abc(\d+)$/

    x|y: x 或者y中的一个

    [xyz] : x或则y或则z中的一个

    [^xyz]: 除了三个以外的任何一个字符

    [a-z]:a-z中间的任意一个字符

    [^a-z]:除了a-z中的任意一个字符

    \d: 一个0-9之间的数字 \D:除了0-9之间的以外的任何字符

    \b:一个边界符

    \w:数字 字母 下划线中的任意一个字符[0-9a-zA-Z_]

    \s :匹配一个空白字符 空格 一个制表符 换页符

    g    (global)       全局匹配(会查找所有匹配,不会在查找到第一个匹配时就停止)改变了lastIdex的值到最新

    i     (ignoreCase)       执行对大小写不敏感的匹配

    m     (multiline)     执行多行匹配

    在中括号[ ] 出现的所有字符都是代表本身意思的字符 没有特殊含义

    1) 有效数字的正则

    "."可以出现也可以不出现,但是一旦出现,后面必须跟着一位或者多为数字   .

    也就是说”[]”代表的是一个字符集,”^”只有在字符集中才是反向字符集的意思

    [] 中括号中不识别两位数 var reg = /^[12]$/; 1 or 2

    var reg = /^[12-68]$/  1, 2-6中的一个, 8 三个中的一个

    字面量方式和实例创建的方式在正则中的区别?

    1.字面量方式中出现的一切都是元字符,所以不能进行变量值的拼接,而实例方式可以

    2.字面量方式中直接写\d就可以, 而在实例中需要把它转义\\d

    age between 18~65 : var reg = /^(1[8-9] | [2-5]\d | 6[0-5])$/

    verify email : var reg = /^[\w.-]+@[0-9a-zA-Z]+(\.[a-zA-z]{2,4}){1,2}$/;

    中国标准真是姓名 2-4位汉字 :  var reg = /^[\u4e00 - \u9fa5]{2,4}$/i

    身份证号码 : var reg = /^\d{17} (X| \d)$/ (根据身份证号码提取信息)

    正则的捕获 var reg = /^(\d{2})(\d{4})$/

    reg.exec ->正则的捕获

    1.捕获到得内容是一个数组

    【捕获的字符 ,index:开始位置,  input 原始字符】

    2. 正则的懒惰性

    捕获第一个匹配的

    lastindex 是正则每一次捕获在的位置,默认值是0

    var ary=[];

    var res =  reg.exec(str);

    while(res){

    ary.push(res[0]);

    res = reg.exec(str);

    }

    3.正则的贪婪性

    我们默认捕获 符合最长的字符串

    在量词后面加一个?

    ?的不同作用

    放在一个普通的元字符后面代表出现0-1次 /\d?/

    房子啊一个量词的元字符后面是取消捕获贪婪性/\d+?/

    字符串中的match

    var ary = str.match(reg);

    match一次性捕获所有成一个数组 match虽然比exec简单,但是在分组捕获的情况下,match只能匹配到大正则的, 捕获不到小正则.

    正则的分组:

    var reg = /^(\d{2})(\d{4})(\d{4})(?:\d{2})(\d{2})(\d{2})$/

    1.改变优先级

    2.分组引用 var = /^(\w)\1(\w)\2$/  \1和第一个正则一模一样  \2和第二个正则一模一样

    (?:)在分组中的意思是只匹配不捕获

    replace:把原有的字符替换成新的字符

    在不使用正则的情况下,每当执行一次只能替换一个字符

    str = str.replace(/zhufeng/g,"zhufengpeixun")

    str = str.replace (/zhufeng/g, function(){

    console.log(arguments[0]);  // 每一次执行匿名函数捕获到的内容

    return "zhufengpeixun" //返回的内容把每次大正则匹配捕获的内容都替换了

    })

    匿名函数的arguments 和 exec得到的数组是非常类似的,也同样可以得到分组的正则的内容

    arguments[1] 获取每一次执行匿名函数我们正则捕获的第一个分组中的内容

    RegExp.$1 获取第一个分组捕获的内容

    正则的捕获: 正则的exec方法,字符串的match方法,字符串的replace方法

    arguments[0] --> exec 捕获的组的第一项

    arguments[1] --> exec捕获数组的index

    arguments[2] --> exec捕获组的input内容

    //queryURLParameter

    var str = "http://kbs.sports.qq.com/kbsweb/game.htm?mid=10000&cid=1467086&app=1.0";

    var reg=/([^?&=]+)=([^?&=]+)/g;

    var obj={};

    // var res = reg.exec(str);

    // while(res){

    // obj[res[1]] = res[2];

    // res =  reg.exec(str);

    // }

    str.replace(reg,function(){

    obj[arguments[1]] =arguments[2];

    });

    console.log(obj);

    cookie = "id=123; username=yang; id=123; sex=1"

    //如果现在要获取id,正则表达式怎么写?

    //value值的表示方法 ([^;]*) 除了分号之外的任意字符重复任意次数

    //结尾符号的判断(;|$)

    var cookie = "id=123; username=yang; sex=1";

    var reg4 = /(^| )id=([^;]*)(;|$)/;//匹配某个cookie的正则

    var arr = cookie.match(reg4);//match方法发挥数组

    console.log(arr[2]);

    //获取usernama对应的值

    var reg5 = /(^| )username=([^;]*)(;|$)/;//获取username的值

    var arr2 = cookie.match(reg5);

    console.log(arr2);//如果match方法没有找到就会返回null [" username=yang;", " ", "yang", ";", index: 7, input: "id=123; username=yang; sex=1"]

    console.log(arr2[2]);//数组中的第二个是就是 第二个分组对应的值

    //获取某个cookie对应的cookie

    function getCookie(key) {

    var str = "(^| )" + key + "=([^;])(;|$)";//[,,,]

    var reg = new RegExp(str);

    if (!arr)//arr数组为null match没有在字符串中找到该cookie

    {

    return null;

    }

    return arr[2];//只需要数组中索引为2的值

    }

    document.cookie = "username=yang;";

    document.cookie = "id=123";

    alert(getCookie("color"));

    alert(getCookie("username"));

    相关文章

      网友评论

          本文标题:正则

          本文链接:https://www.haomeiwen.com/subject/qtnpqxtx.html