6-正则表达式详细+数组note

1. 正则表达式
    是一个描述字符模式的对象.
    1.创建方式
        1) 正则表达式直接量
            var pattern = /s$/;
        2) RegExp()构造函数
            var pattern = new RegExp("s$");
    2. 直接量字符
        正则表达式中所有字母和数字都是按照字面含义进行匹配的。
           字符            匹配
        -----------------------
        字母和数字        自身
            \t            制表符
            \n            换行符    
            \v            垂直制表符
            \f            换页符
            \r            回车符
            \xnn        由十六进制数nn指定的拉丁字符  \x0A => \n
            \uxxxx        由十六进制xxxx指定的Unicode字符,例如 \u0009 => \t
            \cX            控制字符 ^X,例如 \cJ 等价于换页符 \n
    3. 字符类
        将直接量字符单独放在方括号内就组成了字符类。一个字符类可以匹配它所有包含的任意字符。
        [...]        方括号内的任意字符   返回值为 方括号内的每一个字符 单独打印出来
        [^...]        不在方括号内的任意字符  返回值为 不是方括号内的每一个字符
    特殊字符类  
        .            除换行符和其他Unicode行 终止符 之外的任意字符
        \w            任何ASCII字符,等价于[a-z A-Z 0-9] 包括下划线_也可以打印(属于一个字符)
        \W            任何非ASCII字符组成的,等价于[^a-zA-Z0-9_]
        \s            任何Unicode空白符:空格,制表符,回车
        \S            任何非Unicode空白符的字符
        \d            任何ASCII数字,等价于 [0-9]
        \D            任何非ASCII数字之外的任意字符,等价于 [^0-9]
        [\b]    匹配一个单词边界,也就是单词和空格之间的位置 不匹配任何字符    退格直接量(特例)

    4. 重复  一定要用在子表达式之后
        {n,m}    匹配前一项至少n次,但是不超过m次
        {n,}    匹配前一项n次或者更多次
        {n}        匹配前一项n次
        ?        匹配前一项0次或者1次,等价于{0,1}
        +        匹配前一项1次或者多次,等价于{1,}
        *        匹配前一项0次或者多次,等价于{0,} 包括空格

        ^ 与字符串开始的地方匹配,不匹配任何字符
        $ 与字符串结束的地方开始匹配,不匹配任何字符
        \b 匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符

        例如:
            /[abc]/        匹配"a" "b" "c"中任意一个字符
            /[^abc]/    匹配"a" "b" "c"之外的任意一个字符
            /\d{2,4}/    匹配2~4个数字
            /\w{3}\d?/    匹配三个字符或和一个可选的数字
            /\s+java\s+/    匹配前后带有一个或多个空格的字符串"java"

    5. 重复方式
        贪婪重复
            匹配重复字符时是尽可能多地匹配
        非贪婪重复    
            在待匹配的字符后跟随一个问号即可: ?? +? *? {1,5}?
        例如:
            /a+/    可以匹配一个或者多个连续的字母a, 当使用"aaa"作为匹配字符串时正则表达式会匹配它的三个字符
            /a+?/    可以匹配一个或者多个连续的字母a, 但是尽可能少地匹配。只能匹配第一个a
    6. 选择
        使用字符 "|" 分割供选择的字符。选择项的尝试匹配次序是从左到右,直到发现了匹配项,如果左边的选择项匹配,就忽略右边的匹配项,即使它产生更好的匹配。/ab|cd|ef/ 可以匹配 "ab"或者"cd"或者"ef"  

        //test()  执行检测 返回Boolean
         exec(); 执行检查 执行完 就返回 维护一个起始索引  0 index input
                                                                                /【ab|cd|ef】/ 匹配成单个 a b c d e f  
    7. 分组
        "()"作用:
        1) 把单独的项组合成子表达式
            以便可以像处理一个单元那样用"|""*""+""?"对单元内的项进行处理
            /java(script)?/  可以匹配字符串java,后面的script可以有也可以没有
            /(ab|cd)+|ef/       可以匹配"ef",也可以匹配"ab""cd"一次或者多次
        2) 在完整的模式中定义子模式
            当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和圆括号中的子模式相匹配的部分。
            /[a-z]+\d+/  一个或者多个小写字母后跟随一个或者多个数字
            (/[a-z]+(\d+)/)    可以抽出每个匹配末尾的数字
        3) 在同一正则表达式后面引用前面的子表达式。
            \1 引用第一个带圆括号的子表达式
            /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/       \2 引用 ([Ss]cript)
            对正则表达式中前一个子表达式的引用,并不是指对子表达式模式的引用,而是对与那个模式相匹配的文本的引用
                例如:
                /['"][^'"]*['"]/    匹配单引号或者双引号内的0个或者多个字符,但是它并不要求左侧和右侧的引号匹配
                /(['"])[^'"]*\1/    匹配单引号或者双引号内的0个或者多个字符,但是它要求左侧和右侧的引号匹配

    8. 指定匹配位置
        ^    匹配字符串的开头,在多行检索中,匹配一行的开头
        $    匹配字符串的结尾,在多行检索中,匹配一行的结尾
        \b    匹配一个单词的边界,即位于字符\w和\W之间的位置,或者位于字符\w和字符串的开头或结尾之间的位置。
        \B    匹配非单词边界的位置
        (?=p)  零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
        (?!p)  零宽负向先行断言,要求接下来的字符不与p匹配
    9. 修饰符
        不是出现在两条斜线之间,而是出现在第二条斜线之后。
        new RegExp("","igm")
            i  说明匹配模式匹配是不区分大小写
            g  说明模式匹配应该是全局的
            m  用以在多行模式中执行匹配。
                /java$/im    可以匹配"java",也可以匹配"java\nis fun"
      
2. Javascript中 String对正则表达式的支持      
    1. search()  
        参数为一个正则表达式。如果参数不为正则表达式,则先通过RegExp将其转换为构造函数。不支持全局检索,返回第一个与之匹配的子串的位置,如果找不到匹配的子串,返回-1。
        "JavaScript".search(/script/i); //返回4
    2. replace()
        用以执行检索和替换操作。第一个参数是正则表达式,第二个参数是要替换的字符串。
        text.replace(/javascript/gi,"JavaScript"); //不区分大小写将所有javascript转换为JavaScript
    3. match()   
        最常用的正则表达式方法,参数为正则表达式。返回由匹配结果组成的数组。
        当正则表达式中没有g修饰符的时候,就不是全局匹配。这时,数组的第一个元素就为匹配的字符串,剩余的元素则是由正则表达式中用圆括号括起来的子表达式。如果该正则表达式设置为修饰符g,则该方法返回的数组包含字符串中所有匹配结果。
        "1 plus 2 equals 3".match(/\d+/g) //返回["1","2","3"]

        var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
        var text = "visit my blog at http://www.briup.com/~ee";
        var result = text.match(url);
        if(result!=null){
            var fullurl = result[0];
            var protocol = result[1];
            var host = result[2];
            var path = result[3];
        }

你可能感兴趣的:(javascript,JS数组,JS正则表达式,正则表达式)