zoukankan      html  css  js  c++  java
  • web前端学习(四)JavaScript学习笔记部分(10)-- JavaScript正则表达式

    1、JavaScript正则表达式课程概要

      方便查找字符串、数字、特殊字串等等

    2、正则表达式的介绍

      RegExp是正则表达式的缩写

      当检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp就是这种模式

      简单的模式可以是一个单独的字符串

      更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等

      可以规定字符串中的检索位置,以及要检索的字符类型,等等

    3、正则表达式的使用

    3.1两种定义正则表达式变量的方式

    var patt1 = new RegExp("hello");
    var patt2 = /world/ ;

    3.2  test()方法

      test()方法检索字符串中的指定值,返回值是true或false

    var pat = /my/;
    var str = "this is my code...";
    console.log(pat.test(str));//true

    3.3  exec()方法

      exec()方法检索字符串中的指定值,返回值是被找到的值。如果没有发现匹配,则返回null返回的只有第一次遇见的值,且长度只有1

    var pat = /hello/;
    console.log(pat.exec("oh hello world hello!"));/*alert打印出的是hello*/
    /*console控制台打印出的是一个对象
    * 其中打印出的是"hello",index:3,input:"oh hello world!",groups:undefined
    *
    * 0:"hello"     这里应该就是实现了打印对象名得到hello值。
    * groups:undefined
    * index:3
    * input:"oh hello world!"
    * 下面还有一堆每个对象都有的方法
    * */

    3.4.  正则表达式类型

      /pattern/attributes 参数attributes是一个可选的字符串,常用属性"g"(用于指定全局匹配)"l"(用于指定不区分大小写的匹配)

    //不区分大小写
    var str = "Visit Hunger";
    var patt1 = /hunger/i;
    console.log(str.match(patt1));
    //全局匹配
    var str = "hello hunger valley!I am hunger";
    var patt1 = /hunger/g;
    console.log(str.match(patt1));
    //不区分大小写,全局匹配
    var str = "hello Hunger valley!I am hunger";
    var patt1 = /hunger/gi;
    console.log(str.match(patt1));

    3.5字符串正则

    1.search

    字符串查找(返回第一个查找到的位置)
    var str = "Visit W3School! W3School2";
    console.log(str.search(/w3school/));//-1
    console.log(str.search(/w3school/i));//6

    2.match

    字符串匹配(返回匹配的值的数组)
    var str = "1 plus 2 equal 33";
    console.log(console.log(str.match(/d+/))); // [1]
    //d就是数字,+就是联合
    console.log(str.match(/d+/g));//[1,2,33]

    3.replace

    字符串替换(返回替换后的字符串)
    var str = "Hello Hunger! oh I am hunger";
    console.log(str.replace(/Hunger/,"valley"));
    console.log(str.replace(/hunger/ig,"hunger666"));/*全局,不区分大小写替换*/

    4.split

    字符串分割(按照给定分隔符将字符串分割为数组,返回按照分隔符分割之后的数组)
    var str = "Hello Hunger    , oh I am Hunger";
    str.split("");/*给定空的话返回单个字符的数组*/
    /*
    * var str = "Hello Hunger   ,    oh I am Hunger";
    str.split(" ");
    * 给一个空格的话有问题,具体是算法的问题,不知道算法怎么写的,反正结果很有趣。
    * */
    str.split(/s+/);/*s+代表一个或多个空格的意思*/

    4、正则表达式的使用2

    给出个正则表达式书写工具网址

    http://tool.oschina.net/regex/#(这个是用来写正则表达式的)

    https://regexper.com(这个是将给定的正则表达式转换为流程图的一个工具)

    JavaScript正则表达式在线测试工具:

    http://tools.jb51.net/regex/javascript

    正则表达式在线生成工具:

    http://tools.jb51.net/regex/create_reg

    正则写法笔记

    [abc]查找方括号内的任何字符
    var str = "Is this all there isaaa?"
    var patt = /[a-b]/g;
    console.log(str.match(patt));
    //["a", "a", "a", "a"]
    [^abc]查找任何不存在方括号之间的字符
    var str = "hello hunger!";
    var patt = /[^hij]/g;
    console.log(str.match(patt));
    //["e", "l", "l", "o", " ", "u", "n", "g", "e", "r", "!"]
    [0-9]查找任何从0到9的数字
    [a-z]查找任何从小写a到小写z的字符
    [A-Z]查找任何从大写A到大写Z的字符
    [A-z]查找任何从大写A到小写z的字符
    [adgk]查找任何给定集合的任何字符
    [^adgk]查找任何给定集合外的任何字符
    red|blue|green查找任何指定的选项
    var str = "hello hunger! How are you?"
    var patt = /hello|you/g;
    console.log(str.match(patt));
    //["hello", "you"]
    查找单个字符,除了换行和行结束符
    var str = "That's hot";
    var patt = /h.t/g;
    console.log(str.match(patt));
    //["hat", "hot"]
    w查找单个单词字符(字母、数字、下划线)
    var str = "Give 100%1;";
    var patt = /w/g;
    console.log(str.match(patt));
    //["G", "i", "v", "e", "1", "0", "0", "1"]
    W查找单个非单词字符
    var str = "Give 100%;";
    var patt = /W/g;
    console.log(str.match(patt));
    //[" ", "%", ";"]
    d查找单个数字字符
    var str = "Give 100%!";
    var patt = /d/g;
    console.log(str.match(patt));
    // ["1", "0", "0"]
    D查找非数字字符
    var str = "Give 100%";
    var patt = /D/g;
    console.log(str.match(patt));
    //["G", "i", "v", "e", " ", "%"]
    s查找空白字符(空格、tab、换行、回车)
    var str = "Is this all there is?";
    var patt = /s/g;
    console.log(str.match(patt));
    //[" ", " ", " ", " "]
    S查找非空白字符
    var str = "Is this all there is?";
    var patt = /S/g;
    console.log(str.match(patt));
    //["I", "s", "t", "h", "i", "s", "a", "l", "l", "t", "h", "e", "r", "e", "i", "s", "?"]
    匹配单词边界

    /m/匹配"moon"中的'm'  /oo/不匹配"moon"中的'oo',因为'oo'后面的'n'是一个但词字符;

    /oon/匹配"moon"中的'oon',因为'oon'位于字符串中的末端,后面没有单词字符;

    var str = "hello Hunger";
    var patt = /Hung/g;
    console.log(str.match(patt));
    //["Hung"]
    //"在前面就是检测的前面的匹配,在后面就是检测的后面的匹配。"
    B匹配非单词边界
    查找换行符
    var str = "hello Hunger.
     be a PE";
    var patt = /
    /g;
    console.log(str.search(patt));
    //13
    n+匹配任何包含至少一个n的字符串
    var str = "Hello HHunger! Hello World!";
    var patt = /H+/g;
    console.log(str.match(patt));
    //["H", "HH", "H"]

     

    var str = "Hello Hunger! Hello World!";
    var patt2 = /w+/g;
    console.log(str.match(patt2));
    //["Hello", "Hunger", "Hello", "World"]
    n*匹配任何包含零个或多个n的字符串。
    var str = "hellooo Hunger! Hello World!";
    var patt = /lo*/g;
    console.log(str.match(patt));
    //["l", "looo", "l", "lo", "l"]
    n?匹配任何包含零个或一个n的字符串
    var str = "1, 100 or 1000?";
    var patt = /10?/g;
    console.log(str.match(patt));
    //["1", "10", "10"]
    n{X}匹配包含X个n的序列的字符串
    var str = "100, 1000 or 10000?";
    var patt = /d{4}/g;
    console.log(str.match(patt));
    //["1000", "1000"]
    //这里只返回了前四位数字,后面再长也没有检测了。
    n{X,Y}匹配包含X或Y个n的序列的字符串
    var str = "100, 1000 or 10000?";
    var patt = /d{3,4}/g;
    console.log(str.match(patt));
    //["100", "1000", "1000"]
    n{X,}匹配包含至少X个n的序列的字符串
    var str = "100, 1000 or 10000?";
    var patt = /d{3,}/g;
    console.log(str.match(patt));
    //["100", "1000", "10000"]
    n$匹配任何结尾为n的字符串
    var str = "Is this his";
    var patt = /is$/g;
    console.log(str.match(patt));
    //["is"]
    //这里检测的是给定的字符串(str)的结尾,我试了下str的结尾如果不是his而是hi则结果为null,我还试了就算不加参数g结果也是null,
    //所以这里默认检测的是整个字符串。
    ^n匹配任何开头为n的字符串。
    var str = "Is this his noo nyy";
    var patt = /^Is/g;
    console.log(str.match(patt));
    //["Is"]
    //和上面的n$是一样的原理,是检测的整体的
  • 相关阅读:
    HttpClient使用详解
    JBPM的.jpdl.xml文件中文出现乱码
    maven实现项目热部署
    基于Solr和Zookeeper的分布式搜索方案的配置
    MySQL5.7 多线程复制,配置和测试结果(转)
    重庆--上海手动切换容灾方案执行步骤
    elasticsearch Unassigned 分片解决办法
    基于docker使用elasticsearch-dump,es数据导入导出
    iperf3 测试linux服务器之间带宽
    elasticsearch重庆上海移动切换方案
  • 原文地址:https://www.cnblogs.com/foreverlin/p/10102637.html
Copyright © 2011-2022 走看看