这里是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 上分小技巧(一)

    感谢好友破狼提供的这篇好文章,也感谢写这些知识点的作者们和将他们整理到一起的作者.这是github上的一篇文章,在这里本兽也就只做翻译,由于本兽英语水平和编程能力都不咋地,如有不好的地方也请多理解体谅 ...

  2. javascript 正则表达式 详细入门教程

    1.什么是正则表达式 定义: 一个用来搜索.匹配.处理一些符合特定语法规则的一个强大的字符串处理工具. 用途: 进行特定字符和字符串的搜索 替换字符串中指定的字符或字符串 验证字符串是否符合需求 2. ...

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

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

  4. JavaScript 系列--JavaScript一些奇淫技巧的实现方法(二)数字格式化 1234567890转1,234,567,890;argruments 对象(类数组)转换成数组

    一.前言 之前写了一篇文章:JavaScript 系列--JavaScript一些奇淫技巧的实现方法(一)简短的sleep函数,获取时间戳 https://www.mwcxs.top/page/746 ...

  5. JavaScript正则表达式,你真的知道?

    一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...

  6. 【跟着子迟品 underscore】JavaScript 中如何判断两个元素是否 "相同"

    Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对 ...

  7. ( 译、持续更新 ) JavaScript 上分小技巧(四)

    后续如有内容,本篇将会照常更新并排满15个知识点,以下是其他几篇译文的地址: 第一篇地址:( 译.持续更新 ) JavaScript 上分小技巧(一) 第二篇地址:( 译.持续更新 ) JavaScr ...

  8. ( 译、持续更新 ) JavaScript 上分小技巧(二)

    考虑到文章过长,不便于阅读,这里分出第二篇,如有后续,每15个知识点分为一篇... 第一篇地址:( 译.持续更新 ) JavaScript 上分小技巧(一) 第三篇地址:( 译.持续更新 ) Java ...

  9. javascript学习-类型判断

    javascript学习-类型判断 1.类型判断的的武器 javascript中用于类型判断的武器基本上有以下几种: 严格相等===,用来判断null,undefined,true,false这种有限 ...

随机推荐

  1. acdream LCM Challenge (最小公倍数)

    LCM Challenge Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Su ...

  2. 创业实战go语言制作网站(转)

    简单介绍一下之前的整个职业生涯,挺典型的,工程师 –> 资深工程师 –> 架构师 –> 项目经理 –> 部门经理,可以说,产品研发过程中的所有角色我都走了一遍,任职的公司也越来 ...

  3. c#里BindingFlags 筛选标志

    下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员: 为了获取返回值,必须指定 BindingFlags.Instance 或 BindingFlags.Static. 指定 Bin ...

  4. linux防火墙启动、停止、查看

    停止防火墙 service iptables stop 启动防火墙 service iptables start 查看防火墙配置 iptables -L -n 修改的内容只是暂时保存在内存中,如果重启 ...

  5. Servlet3.0学习总结(一)——使用注解标注Servlet

    一.Servlet3.0介绍 Servlet3.0是Java EE6规范的一部分,Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署描述 ...

  6. 如何把本机Sql Sever数据库转移到虚拟主机sql数据库

    不少站长的网站都是asp+access的网站  因为操作access数据库的网站非常简单,甚至你对数据库不懂都可以 但如果是mssql数据库的网站,有些新手朋友就不知道该怎么弄了  在这里给大家做个简 ...

  7. openvpn文本验证模式配置

    证书模式要为每个客户端生成一个证书,虽说安全性较好,但是比较麻烦,可以配置成用户名/密码的验证模式,这样就比较方便了,我这里用最简单的文本验证模式. 一.安装openvpn 不多说了,之前有篇文章已经 ...

  8. 【转】C数据存储(包括const存储在哪,C++不同部分我在文中用红字已指出)

    非原创(文中红字为自己见解,如有不对,请大神指点) 程序由指令和数据组成,C语言程序亦是如此.开发者在编写程序的时候往往需要根据不同数据的特点以及程序需求来选择不同的数据存储方式,那么在C语言中数据的 ...

  9. SSDT Hook结构

    目录 SSDT Hook效果图 SSDT简介 SSDT结构 SSDT HOOK原理 Hook前准备 如何获得SSDT中函数的地址呢 SSDT Hook流程 SSDT Hook实现进程保护 Ring3与 ...

  10. 寒假训练第九场 Brocard Point of a Triangle

    题意:求布洛卡点坐标 思路:直接利用布洛卡点的性质.http://pan.baidu.com/s/1eQiP76E #include<cstdio> #include<cstring ...