这里是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. IE9 表格错位bug

    最近做项目的时候,出现一个只在原生IE9(非模拟)下的bug. bug图片如下: 以上两个模块的html代码和样式都是一样的,然而下面的显示却出现了各种对齐的bug. 用IE9的调试器查看,代码完全一 ...

  2. 中南大学oj 1317 Find the max Link 边权可以为负的树上最长路 树形dp 不能两遍dfs

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1317经典问题:树上最长路,边权可以为负值的,树形dp,不能用两边dfs.反例:5 41 2 22 ...

  3. ShareSDK 实现新浪微博分享(微信,QQ,新浪微博类似)

    1 . 分享(前提是集成了sdk,配置好了Key),只要实现点击事件,调用shareSina(); ShareSDK.initSDK(this); private void shareSina() { ...

  4. Spring Data JPA初使用

    我们都知道Spring是一个非常优秀的JavaEE整合框架,它尽可能的减少我们开发的工作量和难度. 在持久层的业务逻辑方面,Spring开源组织又给我们带来了同样优秀的Spring Data JPA. ...

  5. postInvalidate、removeAllViewsInLayout、refreshDrawableState用法

    postInvalidate.invalidate:会调用控件的onDraw()重绘控件 refreshDrawableState:当控件在使用一个对控件状态敏感的Drawable对象时使用,如一个B ...

  6. Android Fragment学习(一)

    说明 Fragment是在Android3.0(即API 11)才出现的,如果在之前的版本要使用,需要添加support库. Fragment可以认为是Actvity模块化的组件,可以很方便地被添加, ...

  7. HDU 5699 货物运输 二分判定

    转自:http://blog.csdn.net/jtjy568805874/article/details/51480479 #include <cstdio> #include < ...

  8. FOJ 1608 Huge Mission 线段树

    每个节点维护一个最小值,更新发现如果大于最小值,直接向下更新.速度还可以.. #include<cstdio> #include<algorithm> #include< ...

  9. CSLA.NET 简介

    CSLA.NET 据说在国外用的很多,国内介绍这个框架的文章目前网络上能找到的比较早,大多是早期的一些版本的版本的介绍.目前最新版的4.5.6 .版本的整体架构已经有了很大的变化.拟开一个系列,结合〈 ...

  10. 三相异步电动机过载保护及报警PLC控制

    一.项目所需设备.工具.材料 见表7-1. 表7-1  项目所需设备.工具.材料 二.  训练内容: 1.项目描述 试设计一电动机过载保护程序,要求电动机过载时能自动停止运转,同时发出10秒钟的声光报 ...