美文网首页
2020-03-19 正则的扩展

2020-03-19 正则的扩展

作者: aaa8808dde01 | 来源:发表于2020-03-22 20:06 被阅读0次

    一.RegExp(regular expression 正则表达式) 构造函数

    语法

    ES5的两种声明方式
    // 参数是字符串
    var regex = new RegExp('xyz', 'i');//构造函数方式
    var regex = /xyz/i //对象直接量方式
    // 参数为正则表达式
    var regex = new RegExp(/xyz/i)
    

    ES6

    // ES5不支持使用正则表达式声明后,在传入第二个参数。这种方式在ES6开始提供支持,后面声明的修饰符会覆盖第一个参数中的修饰符
    var regex = new RegExp(/xyz/i, 'g')
    
    修饰符

    g:执行全局匹配

    i:执行对大小写不敏感的匹配

    m:执行多行匹配

    3.用法

    1.test() string中是否有匹配的字符串,有则返回true,没有返回false
    var str = "abc";
    var rg = /b/i;
    console.log(rg.test(str)); //true
    
    2.exec()

    检索指定值,有则返回数组,没有则返回null

    var str = "abcb";
    var rg = /b/g;
    console.log(rg.exec(str)); 
    //["b",index: 1, input: "abcb"]
    [匹配的字符串,匹配项在字符串中的位置,应用正则表达式的字符串]
    
    3.match

    检索指定值,若有匹配项,全局搜索时返回匹配项数组,一般搜索时返回也返回数组,格式与exec结果一样,没有则返回null

    var str = "abcb";
    var rg = /b/g;
    console.log(str.match(rg)); //["b", "b"]
    

    exec与match功能类似,但依旧有诸多区别:

    1.如果正则中有g(全局搜索),match返回所有匹配的结果,而exec返回第一次匹配的结果

    2.写法上顺序相反

    3.exec返回第一次匹配的位置,匹配内容,所作用的字符串,match返回匹配的内容

    4.如果没有g,只返回第一个匹配

    4.search()

    返回第一次匹配的位置

     var str = "abcb";
     var rg = /b/g;
     console.log(str.search(rg)); //1
    
    5.replace()

    替换匹配的字符串并返回新的字符串

    var str = "abcb";
    var rg = /b/g;
    console.log(str.replace(rg, "1")); //a1c1
    

    全局模式下全部替换,其他情况下替换第一个,原字符串不发生改变!

    6.compile()

    用于改变正则表达式

    语法:rg.compile(regexp, modifier)

    regexp新的正则表达式;

    modifier新的模式 "g"全局检索; "i"不区分大小写; "gi"不区分大小写且全局检索;

    var str = "abc12456def45646ghi";
    var regExp = new RegExp("[a-z]+");
    console.log( regExp.exec(str) ); // abc
    
    +是限定符, 加号表示它前面的表达式尽可能的多匹配,至少匹配1次,相当于 {1, }
    var regExp = new RegExp('[a-z]','g');//a
    
    
    // 更改regExp的正则表达式模式,并进行编译
    // 这与下列语句的作用是相同的:regExp = /\d+/;
    regExp.compile("\\d+");  // \d :数字  \在引号中需要转义,\d会变成d,再加一个反斜杠
    console.log( regExp.exec(str) ); // 12456
    
    7.split()

    将字符串分割为字符串数组

    语法:string.split(string/regexpobj, howmany)

    可根据字符串或者正则进行分割,howmany选填,用于规定数组大小,为空时全部分割

    
    var rg=new RegExp("e", "g");   
    console.log(("The best things in life are free").split(rg));
    //["Th", " b", "st things in lif", " ar", " fr", "", ""]
    
    console.log('The best things in life are free'.split(rg,2))
    // ["Th", " b"]
    

    正则表达式

    1.两种模糊匹配

    精确匹配 var regex = /hello/;
    1.1横向模糊匹配
    横向模糊指的是,一个正则可匹配的字符串的长度不是固定的,可以是多种情况的

    其实现的方式是使用量词。譬如{m,n},表示连续出现最少m次,最多n次。{m,} 表示至少出现m次。{m} 等价于{m,m},表示出现m次。
    比如/ab{2,5}c/表示匹配这样一个字符串:第一个字符是“a”,接下来是2到5个字符“b”,最后是字符“c”

    var regex = /ab{2,5}c/g;
    var string = "abc abbc abbbc abbbbc abbbbbc abbbbbbc";
    console.log( string.match(regex) );
    ["abbc", "abbbc", "abbbbc", "abbbbbc"]
    

    1.2 纵向模糊匹配
    纵向模糊指的是,一个正则匹配的字符串,具体到某一位字符时,它可以不是某个确定的字符,可以有多种可能。

    其实现的方式是使用字符组。譬如[abc],表示该字符是可以字符“a”、“b”、“c”中的任何一个。

    比如/a[123]b/可以匹配如下三种字符串:"a1b"、"a2b"、"a3b"。

    var regex = /a[123]b/g;
    
    var string = "a0b a1b a2b a3b a4b";
    
    console.log( string.match(regex) );
    
    ["a1b", "a2b", "a3b"]
    

    2.字符组

    2.1 范围表示法
    如果字符组里的字符特别多的话,可以使用范围表示法。

    [123456abcdefGHIJKLM],可以写成[1-6a-fG-M]。用连字符-来省略和简写。
    如果要匹配-,[-az]或[az-]或[a-z]
    不能写成[a-z],因为其表示小写字符中的任何一个字符

    2.2 排除字符组
    排除字符组(反义字符组)的概念

    某位字符可以是任何东西,但就不能是"a"、"b"、"c"。
    例如
    [^abc] //表示是一个除"a"、"b"、"c"之外的任意一个字符。字符组的第一位放^(脱字符),表示求反的概念

    2.3 常见的简写形式

    \d就是[0-9]。表示是一位数字。记忆方式:其英文是digit(数字)。
    \D就是[^0-9]。表示除数字外的任意字符。
    \w就是[0-9a-zA-Z_]。表示数字、大小写字母和下划线。记忆方式:w是word的简写,也称单词字符。
    \W是[^0-9a-zA-Z_]。非单词字符。
    \s是[ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。记忆方式:s是space character的首字母。
    \S是[^ \t\v\n\r\f]。 非空白符。
    .就是[^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。记忆方式:想想省略号...中的每个点,都可以理解成占位符,表示任何类似的东西。

    相关文章

      网友评论

          本文标题:2020-03-19 正则的扩展

          本文链接:https://www.haomeiwen.com/subject/gcqlyhtx.html