正则中的小九九


正则也用了很多了,而真正自己写的正则到真是寥寥无几呀,不是粘贴复制,就是粘贴复制修改,有时候对于一些正则还不是很理解匹配的过程,觉得这作为程序员最基本的知识还是应该自己写一下正则比较好,所以重新又看了一下正则,做一下记录,以备以后自己复习和使用;

正则主要是用于操作字符串

(一)作用

  1. 验证字符串是不是合法
  2. 查找符合制定特征的字符串
  3. 替换字符串

(二)前提知识点

  1. 零宽度:子表达式匹配的仅仅是个位置,或者匹配的内容并不保存到最终的匹配结果中,就认为这个子表达式是零宽的,(其实就是表达式匹配的开始位置和结束位置是一个位置);如:"^ $ (?=xxx) (?!=xxx)"
  2. 占有字符:子表达式匹配的是字符内容不是位置,并保存在最后的匹配结果中
    var reg = /abc/; 可以认为/a/ /b/ /c/ 都是子表达式
复制代码

(三)表达式

  1. 申明方式:

    1. 构造函数:

          var reg1 = new RegExp("xyz",'gi');//参数一:正则内容//参数二:修饰符;// i:不区分大小写;// g:全局匹配;// m:多行匹配,遇到换行符也不结束,匹配到到字符串结束;
      复制代码
    2. 字面量:
          var reg = /xyz/gi;
      复制代码
  2. 方法:

    1. reg.test() //返回true|false

          var reg = /zyx/i;var str="zyxaa"reg.test(str) // true;
      复制代码
    2. exec方法、compile方法 可以自行了解
    3. 其他使用的都是字符串的方法,不是正则方法;
  3. 匹配多字符

表达式 匹配范围 占位 表达式 匹配范围
\d 任意一个数字,0~9 中的任意一个 \D匹配取非 \W \w 任意一个字母或数字或下划线
\s 包括空格、制表符、换页符等空白字符的其中任意一个 \B匹配位置(\b 取非的位置) \b 匹配一个单词边界,一个位置:(其中一边是 "\w" 范围,另一边是 非"\w" 的范围)
. 除了换行符(\n)以外的任意一个字符 [^12A-Z]取补集 [12A-Z] 匹配中括号中的任意一个1或2或A到Z的字符
^ 匹配开始位置,不匹配任何字符 $ 匹配结束位置
| 两边表达式是或的关系 () 子表达式开始和结束的位置
1. 注意很多元字符在字符组内都变成了普通字符,如(^$?)等[.$^?]就是匹配点和$^?[^] ^在第一个位置时候是取补集
复制代码
  1. 次数修饰
表达式 匹配范围 占位 表达式 匹配范围
{n} 重复n次 {m,} 重复至少m次数
{m,n} 重复次数在[m,n]这个范围 ? 重复0到1次 相当于{0,1}
+ 重复次数大于等于1 相当于{1,} * 重复任意次数 相当于{0,}

(四) 匹配过程

  1. 对于整个表达式来说,一般是从字符串位置0处开始尝试,中间有回溯等一些处理,如何匹配成功则返回,接着从成功之后的位置接着匹配,如何失败,就从位置1重新开始之前的匹配,以此类推,直到成功或者是匹配失败;
  2. 对于子表达式来说: 开始匹配的位置是上一个表达式匹配成功结束的位置;
  3. 例如下面匹配:

(五) 一些特殊的用法

  1. 匹配次数的贪婪与非贪婪

    1. 贪婪模式:正则默认情况是贪婪模式:在可以让整个表达式匹配成功的前提下,尽可能最多的去匹配字符串
    1. 非贪婪匹配:在匹配次数修饰符({m,n}/?+*)之后加上"?" 则在可以让整个表达式匹配成功的前提下,尽可能少的去匹配字符串;
  2. 捕获组的引用:

    1. 括号"( )"在正则中括号的作用(起到分组的效果):

      1. 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰;
      2. 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到;
    2. 捕获组 : 就是把正则表达式中子表达式(括号中的表达式)匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用。
    3. 引用:可以在正则表达式内部引用\number (反向引用), 也可以在正则表达式外部引用$number
      1. 引用number是和子表达式左侧括号出现的顺序相对应的
      2. 括号 "( )" 内的子表达式,如果希望匹配结果不进行记录供以后使用,可以使用 "(?:xxxxx)" 格式
  3. 正则断言(正向、负向、先行、后行)

    js中不支持后行断言,所以只介绍先行:

    1. (?=pattern) 正向先行断言 //代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配pattern。
    2. (?!pattern) 负向先行断言 //代表字符串中的一个位置,紧接该位置之后的字符序列不能匹配pattern。

(六) 常用正则表达式

最后送上一些(个)正则表达式供大家使用
复制代码
  1. 只允许字母数字下划线,必须含有大小写和数字和下划线
    var reg=/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\_)\w{8,20}$/;
复制代码
  1. 银行卡四位一空格展示:
    var str="888888888888888888";var newStr= str.replace(/\s/g, '').replace(/(.{4})/g, "$1 ");
复制代码
  1. 有趣的正则:
    var reg = /[^\w.$]/;reg 匹配非字母数字下划线点和$ (匹配特殊字符和中文)
复制代码

js 正则表达式总结相关推荐

  1. java 正则 尖括号_使用JS正则表达式替换括号,尖括号等

    如下所示:function toTxt(str) { var RexStr = /\|\"|\'|\&/g str = str.replace(RexStr, function(Ma ...

  2. JS正则表达式验证数字非常全 - 吾心无所 - 博客园

    JS正则表达式验证数字非常全 Js代码 <script type="text/javascript"> function SubmitCk() { var reg = ...

  3. JS正则表达式大全(整理详细且实用)

    JS正则表达式大全(整理详细且实用) 作者: 字体:[增加 减小] 类型:转载 时间:2013-11-14 我要评论 JS正则表达式大全(整理详细且实用).需要的朋友可以过来参考下,希望对大家有所帮助 ...

  4. js正则表达式匹配span标签

    1.js正则表达式匹配span标签 const spans = htmlStr.match(/<span (.*?)>(.*?)<\/span>/g) 2.js正则表达式–获取 ...

  5. js 字符串替换_正则精要:玩转JS正则表达式,也许只需这一篇(建议收藏)

    0.导引 在正文开始前,先说说正则表达式是什么,为什么要用正则表达式?正则表达式在我个人看来就是一个程序可以识别的规则,有了这个规则,程序就可以帮我们判断某些字符是否符合我们的要求.但是,我们为什么要 ...

  6. html 正则表达式验证金额,js金额校验,js正则表达式,包含正负,小数点后两位...

    js金额校验,js正则表达式,包含正负,小数点后两位,js代码如下: function isMoney(s) { //金额 只允许正数 //var exp = /(^[1-9]([0-9]+)?(\. ...

  7. js 常用js正则表达式大全

    一.校验数字的js正则表达式 1 数字:^[0-9]*$ 2 n位的数字:^d{n}$ 3 至少n位的数字:^d{n,}$ 4 m-n位的数字:^d{m,n}$ 5 零和非零开头的数字:^(0|[1- ...

  8. 手机号判断正则php2019,2019手机号码JS正则表达式验证实例代码

    概念 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的 ...

  9. js 正则表达式判断价格

    js 正则表达式判断价格 验证价格的正则 var reg = /(^1-9?(.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9].0-9?$)/; var money = 520.1 ...

  10. js正则表达式匹配字符串与优化过程

    前言 有时候需要实现对js源文件中的url字符串做拦截预处理,或者前端js语法高亮,或者需要对动态加载的关键源码做混淆保护,在某些步骤实现之前,有一个步骤是需要提炼出所有的合法字符串. 目标:检测源文 ...

最新文章

  1. 健康大脑结构的变化如何影响认知的?
  2. Android LayoutInflater详解(转)
  3. redis 哨兵_Redis哨兵配置
  4. sublime生产力提升利器
  5. 配置Apacheserver
  6. Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)
  7. 针对非业务的通用框架开发,如何做需求分析和设计?
  8. plsql 存储过程 测试
  9. Ghost还原的时候,显示A:GHOSTERR.TXT或CRC32错误的解决方案
  10. win10 如何做到 C盘 的绝对干净,所有软件都安装到D盘,C盘只用来存操作系统。
  11. 一台显示器分成双屏_双屏办公,用起来到底有多爽
  12. 实现用python刷王者荣耀金币
  13. 想转行程序员,参加java培训班真的有用吗?
  14. oracle stdevp函数,plsql和tsql常用函数比对
  15. 全球及中国燃气轮机行业产量规模预测及发展态势研究报告2021-2027年版
  16. EZo UIBuilder中嵌入微博分享按钮【实例】
  17. 第一台计算机如何工作原理,世界上第一台计算机是什么原理_世界上第一台计算机...
  18. 基于Java毕业设计早教课程管理系统源码+系统+mysql+lw文档+部署软件
  19. 电子商务设计师书籍的记录
  20. 盗销苹果ID成黑色产业链

热门文章

  1. Python 函数也是一种对象
  2. shell截取字符串的方法
  3. 截取一段字符串中,两个指定字符串中间的字符串
  4. gulp-uglify《JS压缩》----gulp系列(四)
  5. 运行maven项目抛出java.lang.OutOfMemeoyError异常
  6. 程序员职业规划(一篇来自阿里Java工程师对工作3年左右程序员的职业建议和应该掌握的职业技能)...
  7. ASP.net发布项目引用了C++DLL后页面提示找不到指定模块的异常
  8. python 线程(创建2种方式,锁,死锁,递归锁,GIL锁,守护进程)
  9. 利用unittest+ddt进行接口测试(二):使用yaml文件管理测试数据
  10. A1086. Huffuman树