美文网首页
进阶篇:贪婪模式 (9-2)

进阶篇:贪婪模式 (9-2)

作者: 饥人谷1904_陈俊锋 | 来源:发表于2019-05-23 21:38 被阅读0次

    饥人谷学习进阶第 9 天

    贪婪模式与非贪婪模式

    量词在默认下是尽可能多的匹配的,也就是所谓的贪婪模式

    举例:

    var str = 'a "witch" and her "broom" is one';
    str.match(/".*"/g);
    

    运行结果为:"witch" and her "broom",因为贪婪模式起作用。

    贪婪模式
    在贪婪(默认)模式下,正则引擎尽可能多的重复匹配字符
    /".*"/g

    非贪婪模式
    通过在代表数量的标示符后放置? 来开启非贪婪模式。在非贪婪模式下,正则引擎尽可能少的重复匹配字符
    /".*?"/g

    了解一下查找算法
    正则引擎正向及回溯

    分组
    使用量词的时候匹配多个字符

    /(hugner){10}/
    

    使用()达到将hugner作为一个整体的目的,即为分组

    var reg1 = /hello|world/
    //等同于
    var reg2 = /(hello)|(world)/
    

    分组嵌套
    从HTML字符串中取出URL

    var str = '<a href="http://jirengu.com">"饥人谷"</a>'
    var reg = /href="((https?:)?\/\/.+?)"/
    console.log(reg) //["href="http://jirengu.com"", "http://jirengu.com", "http:"]
    
    var url = str.match(reg)[1]
    

    前瞻

    表达式 含义
    exp1(?=exp2) 匹配后面是exp2的exp1
    exp1(?!exp2) 匹配后面不是exp2的exp1

    例子:

    hunger(?=Byron)
    
    (/good(?=Byron)/).exec('goodByron123'); // ['good']
    (/good(?=Byron)/).exec('goodCasper123'); //null
    (/bad(?=Byron)/).exec('goodCasper123'); //null
    

    通过上面例子可以看出 exp1(?=exp2) 表达式会匹配exp1表达式,但只有其后面内容是exp2的时候才会匹配,也就是两个条件,exp1(?!exp2) 类似

    good(?!Byron)
    
    (/good(?!Byron)/).exec('goodByron123'); //null
    (/good(?!Byron)/).exec('goodCasper123'); //['good']
    (/bad(?!Byron)/).exec('goodCasper123');//null
    

    相关方法

    RegExp.prototype.test(str)

    用于测试字符串参数中是否存在正则表达式模式,如果存在则返回true,否则返回false

    var reg = /\d+\.\d{1,2}$/g
    
    reg.test('123.45'); //true
    reg.test('0.2'); //true
    
    reg.test('a.34'); //false
    reg.test('34.5678'); //false
    

    RegExp.prototype.exec(str)

    用于正则表达式模式在字符串中运行查找,如果exec()找到了匹配的文本,则返回一个结果数组,否则返回null

    除了数组元素和length属性之外,exec()方法返回对象还包括两个属性

    1. index属性声明的是匹配文本的第一个字符的位置
    2. input属性则存放的是检索的字符串string

    String.prototype.split(reg)

    使用split方法把字符串分割成字符数组

    和replace方法类似,在一些复杂的分割情况下我们可以使用正则表达式解决

    'a1b2c3d'.split(/\d/); // ["a", "b", "c", "d"]
    
    'j  l  sd iod ifhs   jlfj'.split(/\s*/); // ["j", "l", "s", "d", "i", "o", "d", "i", "f", "h", "s", "j", "l", "f", "j"]
    

    详细相关方法

    相关文章

      网友评论

          本文标题:进阶篇:贪婪模式 (9-2)

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