这里是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. 如何查看你的 memcached 的状态

    最近略忙,好久没有更新博客了,已长草,今天来除下草,好了,不废话了,开始! 现在很多web服务都会用到  memcached ,如何知道你的 memcached 是否正常工作,命中率如何呢,本文简单介 ...

  2. bzoj3996

    把这个式子弄清楚就知道这是最小割了 相当于,选某个点i有收入ai,i,会损失ci, 如果i,j都被选则有额外收入ai,j+aj,i 明显,对每个点i,连(s,i,∑ai,j) (i,t,ci) 对每对 ...

  3. C# Process.Kill() 拒绝访问(Access Denied) 的解决方案

    需求:很多时候我们需要后台运行几个Console来不停的计算数据,那么部署到客户服务器后,如果出现突发异常,程序挂掉了,那...? 解决方案:封装了一个对后台运行程序不停监测的功能,如果发现程序有异常 ...

  4. UVa 1639 (期望) Candy

    题意: 两个盒子里各有n颗糖,每天有p的概率从第一个盒子里取一颗糖,1-p的概率从第二个盒子里去一颗糖.直到某一天打开某个盒子忽然发现没糖了,求另一个盒子里剩余糖果数的期望. 分析: 紫书上面已经分析 ...

  5. 8.2/baltic神(水)题

    summary:10 bzoj1334: Description N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数 ...

  6. JqueryEasyUI 增加选项卡

    function addTab(subtitle,url){ if(!$('#tabs').tabs('exists',subtitle)){ $('#tabs').tabs('add',{ titl ...

  7. (八)学习CSS之line-style-type属性

    参考:http://www.w3school.com.cn/cssref/pr_list-style-type.asp 设置不同的列表样式: ul.circle {list-style-type:ci ...

  8. Android样式——Styles

    说明 样式(style)是属性的集合,用来指定View或者Window的外观和格式. 这些属性可以是height(高度).padding(内边距).font size(字体颜色)等. 样式定义在另一个 ...

  9. SqlSugar轻量ORM

      蓝灯软件数据股份有限公司项目,代码开源. SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSuga ...

  10. HDU 5328 Problem Killer

    题意:给一段序列,求连续的子序列中最长的等差数列或者等比数列的长度. 解法:O(n)的扫两遍一次判等差一次判等比就好了. 代码: #include<stdio.h> #include< ...