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

一、?: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中恰好相反。
注:下边这个例子可能不太好理解,多写几个表达式熟悉下慢慢就理解了。

js正则表达式中的正向肯定预查和正向否定预查的更多相关文章

  1. js正则表达式中的问号几种用法小结

    这篇文章主要介绍了js正则表达式中的问号几种用法,比如+?,*?,{2,3}?可以停止匹配的贪婪模式,感兴趣的朋友可以参考下 在表示重复的字符后面加问号,比如+?,*?,{2,3}?可以停止匹配的贪婪 ...

  2. js正则表达式中的问号使用技巧总结

    这篇文章主要介绍了js正则表达式中的问号几种用法,比如+?,*?,{2,3}?可以停止匹配的贪婪模式等例子的解析. 在表示重复的字符后面加问号,比如+?,*?,{2,3}?可以停止匹配的贪婪模式. v ...

  3. js正则表达式中test,exec,match方法的区别说明

    js正则表达式中test,exec,match方法的区别说明 test test 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var ...

  4. JS 正则表达式中的特殊字符

    正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个 ...

  5. js正则表达式中test,exec,match方法的区别

    test test 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var reg = new RegExp("1." ...

  6. js正则表达式中的特殊字符

    正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个 ...

  7. js正则表达式中=s.g表示什么意思

    //g是全局匹配//中间的内容表示:匹配以=开关,后面是0或多个空格,然后是双引号括起来的任意字符,比如:= "any symble" 匹配 = " asfjaskldf ...

  8. js 正则表达式中的惰性匹配

    今天看到了一个正则的问题,在其实使用了如下的符号: var reg = /\{(.+?)\}/g; 其中的?号让我疑惑了很久,其实他在这里是惰性匹配的意思,就是能匹配的尽量少匹配.相反,如果不加这个? ...

  9. js正则表达式中匹配反引号

    直接用反引号就可以了~ /`[\W\w\*]+`\.`[\W\w\*]+`/

随机推荐

  1. day06-三元表达式

    python中没有其他语言中的三元表达式,不过有类似的实现方法 其他语言中,例如java的三元表达式是这样int a = 1;String b = "";b = a > 1? ...

  2. 笨方法学python之读写文件、open函数的用法

    一.python读写文件相关知识点 close:关闭文件 read:读取文件的内容//你可以把结果赋给一个变量 readline:只读取文件中的一行 truncate 美 /trʌŋ'ket/ :清空 ...

  3. java定时任务——间隔指定时间执行方法

    摘要:运行 main 方法的时候开始进行定时任务, service.scheduleAtFixedTate(task,5,TimeUnit.SECONDS);方法为关键 此次任务就是 run() 方法 ...

  4. leetcode解题报告 32. Longest Valid Parentheses 用stack的解法

    第一道被我AC的hard题!菜鸡难免激动一下,不要鄙视.. Given a string containing just the characters '(' and ')', find the le ...

  5. Python2 错误记录1File "<string>", line 1, in <module> NameError: name 'f' is not defined

    Python 2下 count = 0 while count < 3: user = input('>>>') pwd = input('>>>') if ...

  6. Zookeeper 基本应用及盲点

    主要应用 From: https://segmentfault.com/a/1190000012185452 http://blog.fens.me/zookeeper-queue/ 原理: 应用zo ...

  7. jquery接触初级-----ajax 之:load()方法

    jquery _ajax 请求主要有几种方式:load(),$.get(),$.post(),$.ajax(),$.getScript(),$.getJson() 1.load()方法 格式:load ...

  8. delphi 新版内存表 FDMemTable

    c++builder XE 官方demo最全60多个 http://community.embarcadero.com/blogs?view=entry&id=8761 FireDAC.Com ...

  9. Windows查看指定端口是否占用和查看进程

    Winodows上查看指定端口号的使用情况和占用进程以及终止所占用端口进程进程用到.下面主要描述如何操作. 1.查看所有端口占用情况 C:\Users\Administrator>netstat ...

  10. 19.JDBC和数据库访问.md

    1.基本功能: Java通过JDBC完成: 2.基本类型,通常用最后一种 3.JDBC简介 Java连接SQL例子: 参考:http://blog.chinaunix.net/uid-20726500 ...