原文:JavaScript正则表达式快速判断技巧

  这里是JS的正则的一点心得,并不是最完整的规则汇总,更侧重实际运用中的快速判断,初学者接触正则之后往往会被一堆星号括号给弄晕,有了一些速判技巧就能从整体上把握从而不慌乱。

  JS正则快速判断技巧的核心就是:注意圆括号和问号。这已经能够应付大部分实际应用了。

一、圆括号

  众所周知,正则中中括号表示范围,大括号表示重复次数,圆括号表示分组。

  圆括号表示分组,但是分组内还有很多文章,细分一下:

       (1):圆括号本身表示分组,同时会保存匹配的项,这叫捕获性分组,默认都是这样的,比如:
         var c="a001”;  /a(\d*)/.test(c);  console.log(RegExp.$1);    //001
         var num=“1234 5678”;  var newNum=num.replace(/(\d{4}) (\d{4})/,”$2 $1");
       (2):如果不想保存,就采用非捕获性分组(?:),比如:
         var c="a001”;  /a(?:\d*)/.test(c);  console.log(RegExp.$1);     //空
       (3):圆括号的分组里,可以对字符组合使用限定符,并且其后可以跟次数,比如:(A\d){2}匹配A3A5
       (4):从分组里多个直接量中选择一个。比如:g(A|a)y,不过这种情况用 g[Aa]y 更快
       (5):当模式中有嵌套圆括号时,变量的编号会按照圆括号开始出现的位置一次进行,比如:
            /([A-Za-z](\d{2}))((-)\d{2})/匹配”A22-33”时,匹配情况如下:
            $1: A22, $2: 22, $3: -33, $4: -
       (6): (?:)表示非捕获性分组,(?=)则表示正向前瞻分组,a(?=reg)匹配后边跟着reg的a;
       (7): (?!)则表示负向前瞻分组,a(?!reg)匹配后边不跟着reg的a;
       (8): (?<=)和(?<!)表示正向和负向后瞻,JavaScript不支持后瞻;
  前面提到的捕获性分组,这衍生出一个反向引用,是指在正则表达式中,就使用前面捕获性分组保存的内容,用”\”加上序号来引用,比如 /(dog)\1/就可以匹配”dogdog”。
二、问号
  问号的用法需要记住三种,除了上面已经提到了在圆括号内部的用法。另外记住下边两种用法即可:
  1、如果问号是直接跟在其他字符后面,则作为一个简单量词,表示出现零次或一次,简单量词还包括:*,+,{n},{n,m},{n,}。
  2、当问号本身是紧跟在其他简单量词之后的时候,它不再作为简单量词,而是改变了量词属性,从贪婪量词变为惰性量词。贪婪量词的意思是在匹配的时候先一口气匹配整个字符串,发现匹配不了的时候,去掉最后一个字符,再匹配,直到长度为零。惰性量词则相反,一次匹配前面一个字符,发现不匹配就再匹配一个。(还有一种支配量词,是在简单量词之后连上加号,前面两种量词都会反复尝试,而支配量词只尝试一次,失败就算了。JavaScript不支持支配量词。)。
所有简单量词本身都是贪婪量词。比如:
数组的第一项表示字符串中与整个模式匹配的字符串,之后的每一项(如果有)保存着与正则表达式中的捕获组匹配的字符串。
  看,其实东西也不多,只要记住了圆括号和问号的用法,就可以快速将正则式加以分割然后逐个理解,从而不会被一堆问号星号括号给弄晕了。当然最基础的一些知识还是要具备的,不过是纯记忆性质的,比较简单了,附上一些常用知识:
字符 正则 描述
\t /\t/ 制表符
\n /\n/ 制表符
\r /\r/ 回车符
\f /\f/ 换页符
\a /\a/ alert字符
\e /\e/ escape字符
\cX /\cX/ 与X相对应的控制字符
\b /\b/ 与回退字符
\v /\v/ 垂直制表符
\0 /\0/ 空字符
字符 等同于 描述
. [^\n\r] 除了换行和回车之外的任意字符
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\s [ \t\n\x0B\f\r] 空白字符
\S [^ \t\n\x0B\f\r] 非空白字符
\w [a-zA-Z_0-9] 单词字符(所有的字母)
\W [^a-zA-Z_0-9] 非单词字符 
 

 

JavaScript正则表达式快速判断技巧相关推荐

  1. JavaScript正则表达式快速简单的指南

    Interested in learning JavaScript? Get my ebook at jshandbook.com 有兴趣学习JavaScript吗? 在jshandbook.com上 ...

  2. 软件开发基于JavaScript实现快速转换文本语言(繁体中文和简体中文)_javascript技巧

    软件开发基于JavaScript实现快速转换文本语言(繁体中文和简体中文)_javascript技巧 一般商业网站都有一个语言的需求,就是为了照顾使用正体中文的国人,会特地提供一个切换到正体中文的选项 ...

  3. 经典JavaScript正则表达式实战

    来源:http://www.cainiao8.com/web/js_note/js_regular_expression_blueidea.html 目录 1. 正则表达式实战...1    2. 匹 ...

  4. 增强优化JavaScript性能的方法 - 技巧大全

    一.优化页面加载时间 在修改JavaScript代码提升网页或应用程序的性能之前,我们先了解一下客户端与JavaScript代码之间的交互处理: JavaScript代码通过HTML的<scri ...

  5. 《JavaScript 正则表达式迷你书》知识点小抄本

    介绍 这周开始学习老姚大佬的<JavaScript 正则表达式迷你书> , 然后习惯性的看完一遍后,整理一下知识点,便于以后自己重新复习. 我个人觉得:自己整理下来的资料,对于知识重现,效 ...

  6. [转]javascript常用的小技巧

    javascript常用的小技巧 分类: javascript 2011-12-19 09:30 170人阅读 评论(1) 收藏 举报 事件源对象 event.srcElement.tagName e ...

  7. javascript正则表达式验证email

    JavaScript表单验证email,判断一个输入量是否为邮箱email,通过正则表达式实现. //检查email邮箱 function isEmail(str){        var reg = ...

  8. 使用JavaScript的一些小技巧

    作者:Airen https://www.w3cplus.com/javascript/javascript-tips.html 任何一门技术在实际中都会有一些属于自己的小技巧.同样的,在使用Java ...

  9. javascript 正则表达式详解

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

最新文章

  1. 香港中文大学(深圳)招收博士生硕士生(计算机视觉方向)
  2. MySQL root密码重置 报错:mysqladmin: connect to server at 'localhost' failed的解决方案
  3. 初学__Python——Python的基本输入输出函数
  4. 自动生成网络拓扑图开源_为视频自动生成字幕,一款神奇的开源工具!
  5. spi flash驱动
  6. [问题解决]同时显示多个Notification时PendingIntent的Intent被覆盖?
  7. 互联网日报 | 新东方二次上市通过港交所聆讯;陌陌宣布任命新CEO;广汽蔚来发致歉声明...
  8. Javascript下拉刷新
  9. 大数据开发笔记(六):Flume基础学习
  10. Android Listview设置每条信息的间距
  11. spark 类别特征_spark 机器学习基础 数据类型
  12. JS 与 后台如何获取 Cookies
  13. win10专业版修改家庭计算机,win10家庭版升级专业版的最完美的方法_win10专业版技巧...
  14. python信息技术答案_高中信息技术《Python语言》模块试卷习题.doc
  15. 电源与地之间的电容作用
  16. 拓展——RGB颜色查询对照表
  17. 古画会唱歌/图片说话对口型视频教程+工具素材
  18. 游戏十连模拟器(html版)
  19. chrome调试与设置 remote设备调试
  20. xstart连接linux桌面使用的端口,配置XManager5连接Linux图形化界面详解

热门文章

  1. 关于BBSxp/LeadBBS的后台上传Webshell的鸡肋防范
  2. BootStrap 智能表单系列 五 表单依赖插件处理
  3. java常见集合及其用途
  4. 论文阅读 Current Solutions for Web Service Composition
  5. 区块链是一种用一种不可变的形式存储数字信息
  6. ConcurrentHashMap总结
  7. 为jQuery写插件
  8. 从Android访问PC端的port (reverse port forwarding)
  9. openstack中RemoteError: AgentNotFoundByTypeHost解决
  10. Ntdsutil对活动目录的管理