Javascript与正则表达式个人总结与收录--高级篇
一、正则表达式中的量词
贪婪量词:
先看整个字符串是不是一个匹配。如果没有发现匹配,它去掉最后字符串中的最后一个字符,并再次尝试。如果还是没有发现匹配,那么再次去掉最后一个字符串,这个过程会一直重复直到发现一个匹配或者字符串不剩任何字符。简单量词都是贪婪量词。
惰性量词:
先看字符串中的第一个字母是不是一个匹配,如果单独着一个字符还不够,就读入下一个字符,组成两个字符的字符串。如果还没有发现匹配,惰性量词继续从字符串中添加字符直到发现一个匹配或者整个字符串都检查过也没有匹配。惰性量词和贪婪量词的工作方式恰好相反。
支配量词:
只尝试匹配整个字符串。如果整个字符串不能产生匹配,不做进一步尝试。
贪婪 |
惰性 |
支配 |
描述 |
? |
?? |
?+ |
零次或一次出现 |
* |
*? |
*+ |
零次或多次出现 |
+ |
+? |
++ |
一次或多次出现 |
{n} |
{n}? |
{n}+ |
恰好n次出现 |
{n,m} |
{n,m}? |
{n,m}+ |
至少n次或至多m次出现 |
{n,} |
{n,}? |
{n,}+ |
至少n次或至多m次出现 |
?:当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
二、 正则表达式高级使用
(?:pattern) :匹配 pattern 但不获取匹配结果,也就是说这是一个非捕获型匹配,不进行存储供以后使用。这在使用 "|" 字符来组合一个模式的各个部分是很有
用。例如要匹配 Rocky 和Ricky,那么R(?:o|i)cky较之 Rocky |Ricky表达更为简略。
(?=pattern) :正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串,匹配pattern前面的位置。这是一个非捕获型匹配,也就是说,该匹配不需要获取 供以后使用。
示例:
alert(/Windows (?=95|98|NT|2000)/.test('Windows 2000')); //true
alert(/Windows(?=95|98|NT|2000)/.test('Windows 2000')); //false
alert(/Windows (?=95|98|NT|2000)/.test('Windows 3.1')); //false
预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) :负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串, 匹配后面不是pattern的位置,这也是一个非捕获型匹配。
示例:
alert(/Windows (?!95|98|NT|2000)/.test('Windows 2000')); // false
alert(/Windows(?!95|98|NT|2000)/.test('Windows 2000')); // true
alert(/Windows (?!95|98|NT|2000)/.test('Windows 3.1')); // true
\数字: 反向引用,通过数字编号引用前面的内容
示例:
alert(/ba(na)\1/.test('banana')); //true
alert(/(\d{4})\1(\d{2})\1/.test('12341234121234')); //true
alert(/(\d{4})\1(\d{2})\2/.test('123412341212')); //true
三、正则表达式中参数的使用
1、g:表明可以进行全局匹配。
① 对于表达式对象的exec方法,不加入g,则只返回第一个匹配,无论执行多少次均是如此,如果加入g,则第一次执行也返回第一个匹配,再执行返回第二个匹配,依次类推。
例如:
var regx=/user\d/;
var str=“user18dsdfuser2dsfsd”;
var rs=regx.exec(str);//此时rs的值为{user1}
var rs2=regx.exec(str);//此时rs的值依然为{user1}
如果regx=/user\d/g;则rs的值为{user1},rs2的值为{user2}
通过这个例子说明:对于exec方法,表达式加入了g,并不是说执行exec方法就可以返回所有的匹配,而是说加入了g之后,我可以通过某种方式得到所有的匹配,这里的方式对于exec而言,就是依次执行这个方法即可。
② 对于match方法,不加入g,只是返回第一个匹配,而且一直执行match方法也总是返回第一个匹配,但加入g,则一次返回所有的匹配(注意是“所有”)。
例如:
var regx=/user\d/;
var str=“user1sdfsffuser2dfsdf”;
var rs=str.match(regx);//此时rs的值为{user1}
var rs2=str.match(regx);//此时rs的值依然为{user1}
如果regx=/user\d/g,则rs的值为{user1,user2},rs2的值也为{user1,user2}
③ 对于String对象的replace方法,表达式不加入g,则只替换第一个匹配,如果加入g,则替换所有匹配。
④ 对于表达式对象的test方法,加g与不加g没有什么区别。
⑤ 对于String对象的split方法,加g与不加g是一样的。
⑥ 对于String对象的search方法,加不加g也是一样的。
2、i:忽略大小写匹配
示例:
alert(/[A-Z]/.test('a')); //false
alert(/[A-Z]/i.test('a')); //true
3、m:多行模式
示例:
var toMatch = "First second\nthird fourth\nfifth sixth";
var reg = /(\w+)$/g;
alert(toMatch.match(reg)); // sixth
假如将\n看作是换行符,此时也想匹配换行前的单词,即second,fourth,则可以使用多行模式:
var toMatch = "First second\nthird fourth\nfifth sixth";
var regm = /(\w+)$/gm;
alert(toMatch.match(regm)); // second,fourth,sixth,
四、正则表达式中test,exec,match,search方法比较
test(): 返回bool值,表示是否匹配成功。
exec(): 返回第一个匹配的字符串
match():返回所有匹配的字符串(数组)
search():返回在字符串中出现的第一个匹配的位置
示例:
var sToMatch = “a bat, a Cat, a fAt baT, a faT cat”;
var re = /at/;
re.test(sToMatch); //true
re.exec(sToMatch); //返回第一个at的实例(即bat中的那个)
re.match(sToMatch); //返回at,at,At,aT,aT,at组成的数组
re.search(sToMatch); //3
五、备注
1、 使用限定符时,如o{0,1},注意在逗号和两个数之间不能有空格
2、 一般来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。
出处:http://www.cnblogs.com/RockyMyx/
本文版权归作者和博客园共有,欢迎转载,但请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载于:https://www.cnblogs.com/RockyMyx/archive/2010/04/07/RegularExpression-Summary-Advance.html
Javascript与正则表达式个人总结与收录--高级篇相关推荐
- javascript的正则表达式
正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个 ...
- javascript 之---正则表达式
正则表达式是一个描述字符模式的对象. JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法.在JavaScript中,正则表达式是 ...
- javascript类型系统——正则表达式RegExp类型
原文:javascript类型系统--正则表达式RegExp类型 × 目录 [1]对象 [2]实例属性 [3]静态属性[4]实例方法 前面的话 前面已经介绍过javascript中正则表达式的基础语法 ...
- javascript中正则表达式的基础语法
前面的话 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为 ...
- JavaScript高级篇之Function对象
JavaScript高级篇之Function对象 一: Function对象引入: Function对象是js的方法对象,可以用Function实例化出任何js方法对象. 例如: 1 <%@ p ...
- JavaScript常用正则表达式收集
JavaScript常用正则表达式收集 -------------------------------------------------------------------------------- ...
- JavaScript验证正则表达式大全
JavaScript验证正则表达式大全 匹配中文字符的正则表达式: [u4e00-u9fa5] 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长度(一个双字节字符长度 ...
- JavaScript使用正则表达式进行邮箱表单验证实例
*******JavaScript使用正则表达式进行邮箱表单验证实例************ 1.在JavaScript中也可以使用正则表达式对表单输入的数据进行验证格式如下 /正则表达式/.test ...
- JavaScript重难点解析5(对象高级、浏览器内核与事件循环模型(js异步机制))
JavaScript重难点解析5(对象高级.浏览器内核与事件循环模型(js异步机制) 对象高级 对象创建模式 Object构造函数模式 对象字面量模式 工厂模式 自定义构造函数模式 构造函数+原型的组 ...
最新文章
- 又踩到Dubbo的坑,但是这次我笑不出来
- WP8.1程序开发,可视树VisualTreeHelper类的使用
- 国企程序员是一种怎样的体验?
- angularJS+requireJS实现controller及directive的按需加载
- 生日快乐模板php,可会有人跟我说句生日快乐
- return 输出为空php,thinkphp5 返回json数据的方法---以及返回json为空的原因
- Gauss Elimination算法分析与实现
- QT安装后编译错误怎么办?
- thoughtworks面试总结
- 华为u8500 刷到2.2再刷回2.1后WIFI无法启动的解决办法 无法启动无线局域网
- python字符串结束的标志_python-7-字符串的操作_方法_format_列表的操作
- 【Latex】如何用 latex 分双栏(分两列)
- dell服务器1950安装win7系统,DELLOPTIPLEX3040安装WIN7操作系统方法图文
- 使用Dash快速构建你的数据可视化前端
- Jmeter-----保存到响应文件
- 我撑伞,在石桥上等你
- 为什么在Python官网上下载这么慢?
- LVM中VG PV PP LV的概念
- 用半年的时间面试自己
- 解决 ffmpeg yasm not found, use --disable-yasm for a crippled build
热门文章
- Java项目:在线电影售票系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)
- suse linux显示乱码,open suse11.4中文乱码问题
- 智能跳过节假日算法java_java计算两个日期之前的天数实例(排除节假日和周末)...
- TreeSet集合(自然排序和比较器排序)
- python 打包 .app 运行 控制台窗口_Python打包工具
- 算法(4)数据结构:堆
- 微信小程序转发 分享 打电话功能,完整代码附效果图
- 解决Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifests/
- CSS3动画过渡的jquery动态弹出框插件
- golang flag简单用法