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中恰好相反。
注:下边这个例子可能不太好理解,多写几个表达式熟悉下慢慢就理解了。
js正则表达式中的正向肯定预查和正向否定预查的更多相关文章
- js正则表达式中的问号几种用法小结
这篇文章主要介绍了js正则表达式中的问号几种用法,比如+?,*?,{2,3}?可以停止匹配的贪婪模式,感兴趣的朋友可以参考下 在表示重复的字符后面加问号,比如+?,*?,{2,3}?可以停止匹配的贪婪 ...
- js正则表达式中的问号使用技巧总结
这篇文章主要介绍了js正则表达式中的问号几种用法,比如+?,*?,{2,3}?可以停止匹配的贪婪模式等例子的解析. 在表示重复的字符后面加问号,比如+?,*?,{2,3}?可以停止匹配的贪婪模式. v ...
- js正则表达式中test,exec,match方法的区别说明
js正则表达式中test,exec,match方法的区别说明 test test 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var ...
- JS 正则表达式中的特殊字符
正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个 ...
- js正则表达式中test,exec,match方法的区别
test test 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var reg = new RegExp("1." ...
- js正则表达式中的特殊字符
正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个 ...
- js正则表达式中=s.g表示什么意思
//g是全局匹配//中间的内容表示:匹配以=开关,后面是0或多个空格,然后是双引号括起来的任意字符,比如:= "any symble" 匹配 = " asfjaskldf ...
- js 正则表达式中的惰性匹配
今天看到了一个正则的问题,在其实使用了如下的符号: var reg = /\{(.+?)\}/g; 其中的?号让我疑惑了很久,其实他在这里是惰性匹配的意思,就是能匹配的尽量少匹配.相反,如果不加这个? ...
- js正则表达式中匹配反引号
直接用反引号就可以了~ /`[\W\w\*]+`\.`[\W\w\*]+`/
随机推荐
- 20165304 实验二 Java面向对象程序设计
一.面向对象程序设计1--单元测试和TDD 实验要求 1.参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成单元测试的学习 2 ...
- 添加快捷键 ShortCut
http://docwiki.embarcadero.com/CodeExamples/Berlin/en/ShortCut_(Delphi) procedure TForm1.FormCreate( ...
- Java面试题_简答题
作为一个大三在校生,很快就要去实习了,但总感觉自己连一个刚入门的菜鸟都不如,哎.发现自己连那个程序员的门槛都还没进,有点小伤心,不过伤心没用,努力向前才是我们现在应该做的事情. 下面是我之前在学校所从 ...
- U3D MemoryProfiler
MemoryProfiler Unity 5.3a4 has a new very lowlevel memory profiler API. It can tell you which object ...
- Haskell语言学习笔记(72)Free Monad
安装 free 包 $ cabal install free Installed free-5.0.2 Free Monad data Free f a = Pure a | Free (f (Fre ...
- jQuery添加添加时间与时间戳相互转换组件
时间与时间戳的格式相互转换(转换主要兼容ie8,ie8不支持new Date()) (function($) { $.extend({ myTime: { CurTime: function () { ...
- IE (第二部分) 浏览器 中 关于浏览器模式和文本模式
判断真正的 IE 版本 很多 JS 框架都通过 UA 判断 IE 的版本.对于 IE6,这种做法没问题( IE6 没有浏览器模式的概念,也没有其它 IE 可以把浏览器模式改为 IE6:IE7 虽然也没 ...
- C# 使用post的方式提交raw格式的数据,数据为json格式,多层嵌套
原文地址:https://cnodejs.org/topic/539ff8a5c3ee0b5820938d60 raw方式使用的是纯字符串的数据上传方式,所以在POST之前,可能需要手工的把一些JSO ...
- C# 计算接口调用时长
//获取 接口的数据 Stopwatch sw = new Stopwatch();//计算耗时 sw.Start();fn1();//接口调用方法 sw.Stop();return JsonMsg. ...
- Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能
Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能. 下面是个例子: import org.junit.Test; import java. ...