• js正则表达式中的正向肯定预查和正向否定预查


    对于没有使用过这几个表达式的人,应该对这个概念都有点不太理解,下面就以实际例子说明这几个表达式的用户。

    一、?:pattern——匹配检验:
    会作为匹配校验,是一个非获取匹配,并出现在匹配字符结果里面,比如 windows(?:2000|NT|98) 等同于 windows2000|windowsNT|windows98
    就是一个比用 | 更简略的表达式,跟直接用 | 的区别是不作为子匹配返回:

    例1:

    var reg1=/windows(?:2000|NT|98)/i
    var reg2=/windows(2000|NT|98)/i
    var str='windows2000'
    
    str.match(reg1) // ["windows2000", index: 0, input: "windows2000"]
    str.match(reg2) // ["windows2000", "2000", index: 0, input: "windows2000"]
    reg1.test(str)    //true
    reg2.test(str)    //true

    可以注意到 第一个正则匹配返回的结果中没有子匹配的返回内容

    二、?=pattern——正向肯定预查:

    会作为匹配校验,是一个非获取匹配,不会出现在匹配结果字符串里面。
    示例:

    var reg=/windows(?=2000|NT|98)/i
    var str='windows2000'
    var str2='windows xp'
    str.match(reg) // ["windows", index: 0, input: "windows2000"]
    str2.match(reg)    //null

    其中,
    1. 匹配windows,如果没有匹配到,那么就返回为空
    2. 其后是否有2000|NT|98其中的一个,如果有,那么就返回 windows,没有就返回为空

    三、?!pattern——正向否定预查:
    在任何不匹配pattern的字符串开始处匹配查找字符串,也是一个非获取匹配,不会出现在匹配结果字符串里面。
    示例:

    var reg=/windows(?!2000|NT|98)/i
    var str='windows2000'
    var str2='windows xp'
    str.match(reg) // null
    str2.match(reg)    //["windows", index: 0, input: "windows xp"]

    可以看到,跟上边正想肯定预查刚好相反。

    上边的例子是?!前边直接匹配字符串,还有一种情况,就是元字符,如下例:

    var reg=/windows*(?!2000|NT|98)/i    
    var str='windows2000'
    var str2='windows xp'
    str.match(reg) // ["window", index: 0, input: "windows2000"]
    str2.match(reg)    //["windows", index: 0, input: "windows xp"]

    *在正则表达式中的意思是匹配前一个子表达式0次或者多次,那么对于str,能够匹配 ?! 后边的表达式,所以取反,即不匹配*前边的表达式(这里是 s ),匹配结果为window,str2中恰好相反。
    注:下边这个例子可能不太好理解,多写几个表达式熟悉下慢慢就理解了。

  • 相关阅读:
    【WP开发】WebView控件应用要点
    【WP开发】认清“不透明度”与“可见性”的区别
    分享:自学编程的方法
    <C#>找出数组中重复次数最多的数值
    【WP 8.1开发】上下文菜单
    【WP 8.1开发】同时更新多种磁贴
    【WP开发】如何处理溢出的文本
    lnmp/nginx系统真正有效的图片防盗链完整设置详解
    PHP自动加载SPL的四种处理方式
    算法笔记-判断链表保存的字符串是否是回文
  • 原文地址:https://www.cnblogs.com/xyyt/p/8758993.html
Copyright © 2020-2023  润新知