美文网首页web前端
正向前瞻到底是干啥的?

正向前瞻到底是干啥的?

作者: 姜治宇 | 来源:发表于2020-02-09 13:28 被阅读0次

    正则表达式有个前瞻的概念,分为:
    1、正向前瞻(?=)
    =就是肯定的意思。
    英文:look ahead positive
    2、负向前瞻(?!)
    !就是非,否定的意思。
    英文:look ahead negative
    从字面上看并不好理解,其实这是翻译的问题,我们从英文字面上更好理解。
    look ahead就是昂首挺胸向前走路,这个前,就是从左到右
    positive就是肯定,表示你往前走肯定能看到的东西;相反,negative就是否定,就是你往前走看不到的东西。
    举个例子,比如有这么一个字符串:

    var str = 'hello123jerry'
    

    我们从左到右看(昂首往前走路),hello能看到123吗?
    当然肯定看到123了啊,所以我们顺利匹配到了,这就是正向前瞻:

    var str= 'hello123jerry'
    var reg1 = /hello(?=123)/g
    console.log(str.match(reg1))//[ 'hello' ]
    

    我们继续。
    hello123继续往前走,不能看到tom吧?(我们怕遇到tom)
    放心,前方是jerry,这就是负向前瞻:

    var str = 'hello123jerry'
    var reg2 = /hello123(?!tom)/g
    console.log(str.match(reg2))//[ 'hello123' ]
    

    综合起来,也就是hello要遇到123,但不能遇到tom:

    var str = 'hello123jerry'
    var reg3 = /hello(?=123)(?!tom)/g
    console.log(str.match(reg3))
    

    我们注意到,前瞻并不捕获,只是告诉你:前面有啥捏?
    弄懂了基本语义,我们看个比较常见的例子。

    金额加千分位间隔:

    这个需求大家不陌生吧?实现的方法很多,不过使用正向前瞻是最省事的:

    var num = 13123903243
    //第一步:将num转为string类型
    var str3 = num.toString()//先转换到字符串
    //正向前瞻:(\d)往前走,前面是3的倍数,
    //\d{3}表示3位数字,
    ///d{3}+表示3的倍数
    var handleNum = str3.replace(/(\d)(?=(\d{3})+$)/g,function(val){
        return val+','
    })
    console.log(handleNum)
    
    运行过程: run.png

    其实,正则表达式除了前瞻,还有后顾。但因为js并不支持,我们这里就省略了,有兴趣的同学可以自行百度一下。

    相关文章

      网友评论

        本文标题:正向前瞻到底是干啥的?

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