• 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
    

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

  • 相关阅读:
    【转】提高VR渲染速度的最好方法(经典转载)
    【转】提高VR渲染速度的关键
    【转】怎样提高VR渲染速度
    MySql学习05---数据类型
    MySql学习04----数据库表的基本操作
    MySql学习03----数据库基本操作
    MySql学习02----SQL编程的基本概念
    MySql学习01----数据库简介
    MySql学习路线00
    maven07-----maven中的聚合与继承
  • 原文地址:https://www.cnblogs.com/langjt/p/4338648.html
Copyright © 2020-2023  润新知