zoukankan      html  css  js  c++  java
  • [正则表达式](自己使用总结)

    作者:zccst

    参考多处资料

    2014-04-23
    一、基础
    1,常用各种语法

    (1)直接量字符



    v
    f

    (匹配一个单词边界), B(不匹配单词边界)
    NUM(匹配NUM个,如(.)1匹配两个连续相同的字符), oNUM(八进制), xNUM(十六进制)

    //标点符号
    ^, $ .
    :
    =

    (2)字符
    s(匹配空白字符), S(匹配非空白字符)
    w(匹配字母,数字或下划线字符), W
    d(匹配一个数字,/d/=/[0-9]/), D(非数字,/D/=/[^0-9]/)
    [a-z]表示匹配字符集中任意一个,[^a-z]不匹配字符集中任意一个

    (3)重复
    *(0次或多次),
    +(1次或多次),
    ?(0次或1次)
    例子:
    /s+javas+/  匹配前后带有一个或多个空格的字符串"java"
    /[^(]*/       匹配一个或多个左括号的字符


    {n}匹配n次,{n,m} 表示匹配n到m次数,{n,}匹配n次以上
    例如,
    例子1:
    /d{2,4}/     匹配2-4个数字
    /w{3}d?/    精确匹配三个单词和一个可选的数字

    例子2:'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
    例子3:{([a-zA-Z_]{3,})}
    解析,
    (1)先看括号内([a-zA-Z_]{3,})
    [a-zA-Z_] 意思是匹配a-z、A-Z和下划线字符
    {3,} 意思是上面的重复三次及以上,即连续三个字符及以上为符合条件
    (2)在大括号内{}
    如果不用转移,{}相当于出现次数,如果使用转移,则为大括号自身。



    //贪婪模式
    贪婪:尽可能多的匹配
    不贪婪:在遇到限定符*,+,?,{n},{n,},{n,m}时,例'o+?'匹配o,'o+'匹配所有

    patten
    ?:patten  industr(?:y|ies)
    ?=patten  windows?=95|98|2000
    ?!=patten  windows?!=95|98|2000



    (4)选择、分组和引用







    二、函数

    1,RegExp函数
    exec
    test

    2,字符串函数
    match
    search
    replace
    split


    1,RegExp函数

    (1)exec
    exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方法更为复杂。

    如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看得出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。


    Js代码  收藏代码
    1. function execDemo(){  
    2.     var r, re; // 声明变量。   
    3.     var s = "The rain in Spain falls mainly in the plain mainly";  
    4.     re = /[w]*(ai)n(ly)/ig;  
    5.     r = re.exec(s);//此结果只是匹配的第一个结果。不过里面还是一个数组  
    6.     document.write(r + "<br/>");   
    7.     console.log(r);  
    8.     for(key in r){  
    9.         document.write(key + "-" + r[key] + "<br/>");  
    10.         console.log(key , "-" , r[key])  
    11.     }   
    12.     alert(r['lastIndex']);  
    13. }  
    14. execDemo();  


    r打印出来的结果是
    [0] mainly
    [1] ai
    [2] ly
    index 24
    input The rain in Spain falls mainly in the plain mainly


    返回所有匹配结果,可以使用while
    while ((result = re.exec(s)) != null)  {

    }


    (2)test
    返回一个 Boolean 值,它指出在被查找的字符串中是否匹配给出的正则表达式。
    rgexp.test(str)

    例如:
    var browser = {};
    var ua = navigator.userAgent;
    //是否为Gecko内核
    browser.isGecko = /gecko/i.test(ua) && !/like gecko/i.test(ua);



    2,字符串函数

    (1)match
    match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
    该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。

    Js代码  收藏代码
    1. var name = "JeffreyWay";  
    2. name.match(/e/); //e  
    3. name.match(/e/g); //e,e,还可以name.match(/e/g)[1]  
    4. var string = 'This is just a string with some 12345 and some !@#$ mixed in.';  
    5. alert(string.match(/[a-z]+/gi)); // alerts "This,is,just,a,string,with,some,and,some,mixed,in"    



    理由:可以匹配一个或多个大写或小写字母。i不区分大小写,g全局

    如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。 index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。

    如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。

    注意:在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。



    (2)search



    (3)replace
    使用详见:http://zccst.iteye.com/admin/blogs/1672814



    (4)split
    var str = 'this is my string';   
    alert(str.split(/s/)); // alerts "this, is, my, string",可以str.split(/s/)[3]

  • 相关阅读:
    PAT 乙级 -- 1011 -- A+B和C
    PAT 乙级 -- 1010 -- 一元多项式求导
    PAT 乙级 -- 1008 -- 数组元素循环右移问题
    PAT 乙级 -- 1009 -- 说反话
    python3.6执行AES加密及解密方法
    Python3.6 AES加密 pycrypto‎ 更新为 pycrypto‎demo | TypeError: Object type <class 'str'> cannot be passed to C code
    windows下python3.6安装pycryto or crypto or pycryptodome与使用
    chkconfig命令
    centos下安装redis
    selenium--基础学习
  • 原文地址:https://www.cnblogs.com/shsgl/p/4289871.html
Copyright © 2011-2022 走看看