zoukankan      html  css  js  c++  java
  • Javascript正则表达式

    正则表达式是对字符串的结构进行描述,简单说它就是描述字符串的字符排列规律。它是字符串匹配和处理方面的高手。

    正则写法

    1. 简写:/pattern/[attributes]

    var reg = /abc/;  // 字面量方式

    2. 全写:new RegExp(pattern[, attributes])

    var reg = new RegExp("abc");

    其中attributes为 “g”(全文查找 )、“i”(忽略大小写) 和 “m”(多行查找)的任意组合,默认值都是“非”。

    var reg = new RegExp("a","gi”);   // 匹配所有的a或A  

    当正则为变量时,只能用全写方式。

    var str = “abc”;
    var reg =  new RegExp(str);

     

    正则方法

    exec:检索字符串中指定的值。返回找到的值,并确定其位置。
    test:正则匹配字符串,返回boolean
    compile :编译正则表达式。

    支持正则表达式的 String 对象的方法

    search:字符串匹配正则,返回位置(失败返回: -1),类似string.indexOf()

    match: 字符串匹配正则,返回数组(失败返回: null)

    replace:  字符串匹配正则,匹配成功的字符被替换成新的字符串。

    split:     把字符串分割为字符串数组。

     

    元字符

      (  [  {    ^  $  |  )  ?  *  +  .

    元字符是正则表达式的一部分,当我们要匹配正则表达式本身时,必须对这些元字符转义

     

    预定义类 

    .  查找单个字符,除了换行和行结束符。(小数点)匹配任何除了新一行开头字符的任何单个字符。

    w 查找单词字符:数字、字母、下划线 。等价于[A-Za-z0-9_]

    W 查找非单词字符。等价于[^A-Za-z0-9_]

    d 查找数字。等价于[0-9]

    D 查找非数字字符。等价于[^0-9]

    s 查找空白字符。包括空格、制表符、换页符和换行符。

    S 查找非空白字符。

     匹配单词边界:起始、结束、空格

    B 匹配非单词边界。

    查找 NUL 字符。

    查找换行符。

    f 查找换页符。

    查找回车符。

    查找制表符。

    v 查找垂直制表符。

    xxx 查找以八进制数 xxx 规定的字符。

    xdd 查找以十六进制数 dd 规定的字符。

    uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

     对于其后的平常被当作字面量的字符,将其转义为特殊字符。

     

    量词

    n+ 匹配任何包含至少一个 n 的字符串。等价于 n{1,}

    n* 匹配任何包含零个或多个 n 的字符串。等价于 n{0,}

    n? 匹配任何包含零个或一个 n 的字符串。等价于 n{0,1}

    n{X} 匹配包含 X 个 n 的序列的字符串。

    n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。

    n{X,} 匹配包含至少 X 个 n 的序列的字符串。

    n$ 匹配任何结尾为 n 的字符串。

    ^n 匹配任何开头为 n 的字符串。当这个字符出现在一个字符集合模式的第一个字符的时候,它将会有不同的意义。比如,/[^a-zs]/会匹配“my 3 sisters”中的‘3’

    ?=n 匹配任何其后紧接指定字符串 n 的字符串。

    ?!n 匹配任何其后没有紧接指定字符串 n 的字符串。

    如果'?'紧跟在在任何量词*, + , ?,{}后面,将会使量词变成非贪婪模式(匹配最少的次数),和默认的贪婪模式(匹配最多的次数)正好相反。
    比如,使用/d+/非全局的匹配“123abc”将会返回“123”,如果使用/d+?/,那么就只会匹配到“1”。

     

    字符类
    字符类的中括号[]里的整体代表一个字符!

    [abc]    查找方括号之间的任何字符。

    [^abc] 查找任何不在方括号之间的字符。

    [0-9]    查找任何从 0 至 9 的数字。

    [a-z]    查找任何从小写 a 到小写 z 的字符。

    [A-Z]   查找任何从大写 A 到大写 Z 的字符。

    [A-z]   查找任何从大写 A 到小写 z 的字符。

    [adgk] 查找给定集合内的任何字符。

    [^adgk] 查找给定集合外的任何字符。

    (red|blue|green) 查找任何指定的选项。

      

    匹配子项

    把正则的整体叫作“母亲”,把从左边起第一个小括号里的正则,叫作第一个子项,

    第二个小括号里的正则就是第二个子项,依此类推。

    小括号,它在正则表达式中可以被用做是一个记忆设备。这一部分正则所匹配的字符将会被记住,在后面可以被利用。

    可匹配子项的方法有:replace、match(正则不加g时才匹配子项,且返回数组的第一项为正则整体)

    每次执行完正则匹配后,RegExp的属性都会被重置为当前正则匹配结果,比如RegExp.$1第一个子项,RegExp.$9第九个子项。

    var re = /(w+)s(w+)/; 
    var str = "John Smith"; 
    var newstr = str.replace(re, "$2, $1"); 
    console.log(newstr); // output: Smith John
    

    匹配规则

    (x)        匹配‘x’并且记住匹配项。这个被叫做捕获括号。 比如,/(foo)/匹配和记住了“foo bar”中的'foo'。匹配到子字符串可以通过结果数组的[1],...,[n]元素进行访问。

    (?:x)    匹配'x'但是不记住匹配项。这种被叫做非捕获括号。匹配到的子字符串不能通过结果数组的[1],...,[n]进行访问。

    x(?=y)  匹配'x'仅仅当'x'后面跟着'y'.这种叫做正向肯定查找。比如,/Jack(?=Sprat)/会匹配到'Jack'仅仅当它后面跟着'Sprat':

    /Jack(?=Sprat)/.exec("JackSprat"); 
    // output: ["Jack"]

    x(?!y)    匹配'x'仅仅当'x'后面不跟着'y',这个叫做正向否定查找。比如,/d+(?!.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。

    /d+(?!.)/.exec("3.141") ;
    // output: ["141"],而不是3.141

     

    正则应用

    new RegExp("(\s|^)" + className + "(\s|$)"):匹配元素的样式名

    replace(/(d{3})d{3,4}(d*)/, "$1****$2"):替换手机号的中间3-4位数字为星号,支持6+位的手机号号。

    "13412345678".replace(/(d{3})d{3,4}(d*)/, "$1****$2");
    // output: 134****5678

    /[+-]?(?:d*.|)d+(?:[eE][+-]?d+|)/ : 匹配数字(参见jquery2.0.3源码的67行)

    // Used for matching numbers
    core_pnum = /[+-]?(?:d*.|)d+(?:[eE][+-]?d+|)/.source,
    

    这个正则中的竖线|,初次看上去有点疑惑,因为右侧是空的,那就是表示什么的没有,也就是nothing。
    其实也就是想表达:要么有,要么没有的意思,那么用问号来表达应该更容易理解些。大神们写的代码就是不一样,呵呵~
    所以,写成下面的形式,或许更好理解些:

    /[+-]? d* .? d+ (?:[eE][+-]?d+)?/i
    

    总结
    个人感觉正则表达式初学时,最容易被那些符号的组合给搞晕。所以弄清楚那些符号的含义非常重要。
    还有看到很长的正则表达式时莫着急,尝试用拆分法各个击破。不明白的符号含义,及时查资料直到弄懂为止。

  • 相关阅读:
    centos crash debug
    go get Unknown SSL protocol error in connection to gopkg.in
    Tensorflow serving with Kubernetes
    Spring 集成 Swagger UI
    Docker Registry V2 Garbage Collection
    Docker Registry V2 with Nginx
    Zabbix磁盘性能监控
    Zabbix CPU utilization监控参数
    Windows挂载Gluster复制卷
    Redis持久化存储(三)
  • 原文地址:https://www.cnblogs.com/langjt/p/4338648.html
Copyright © 2011-2022 走看看