正则表达式 js java c# python

学习网站

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp

概念

  • 正则表达式是为了解决字符串操作中一些比较麻烦的场景,比如字符串提取、字符串替换、字符串验证等

    • 常用于:表单验证:是否是一个数字、是一个电话号码、是一个邮箱。。。
    • 字符串替换:
    • 字符串查找

正则表达式其实也是js里面的一个对象

创建一个正则表达式

  • var reg2=new RegExp("a");
  • var reg1=/a/;
    • 其中//是标记,a表示要匹配的字符

正则表达式匹配

    var reg=/a/;        //匹配字符串中的a字符
reg.test("abc");
//正则表达式的test用来检测字符串是否满足正则表达式的要求;
//由于"abc"中存在a,所以是符合要求的,所以这段代码的返回值为:true const isTrue = reg.test("coke"); //由于"coke"中不存在a字符,所以不符合条件 -->isTrue:false var reg2=/abc/;
reg2.test("adbcd"); //字符串中必然存在"abc"才符合要求,所以这段代码的返回值为false reg2.test("1abc"); //true
reg2.test("abc123"); //true
reg2.test("abcabc"); //true

正则表达式特殊字符

字符类别

  • . 表示除了换行符(\r \n)以外的任意字符

      var reg=/./;
    reg.test("a"); //true
    reg.test("."); //true
    reg.test("\r"); //false
    reg.test("1\r"); //存在一个1,不是换行符,所以结果为:true
    reg.test("\r\n"); //false //注意点:如果以后要匹配.字符,不要直接写.
    //为了匹配qq邮箱,写了 /qq.com/ 这是一个错误的写法:
    //=>/qq.com/不仅匹配:"qq.com"也匹配"qq3com" "qq@com" //解决方案:/qq\.com/ 或者 /qq[.]com/
  • \d 表示数字

      var reg=/\d/;
    reg.test("123abc"); //由于存在一个数字,所以结果为true
    reg.test("abcde"); //由于不存在任何数字,所以结果为false //扩展:
    var _reg=/\d\d/;
    _reg.test("1b"); //不存在2个连续数字,所以结果为:false
    _reg.test("a12c"); //存在2个连续数字,结果为:true //匹配手机号码:出现了连续11个数字
    var isCellphoneNumber=/\d\d\d\d\d\d\d\d\d\d\d/;
  • 案例:匹配手机号码

      var reg = /\d\d\d\d\d\d\d\d\d\d\d/;
    reg.test("13532159091"); //true
    reg.test("17380889395"); //true
    reg.test("a7380889395"); //false
  • \D 是\d的取反结果,表示不是数字

      var reg=/\D/;
    _reg.test("123"); //由于全是数字,所以结果为:false
    _reg.test("123a"); //存在一个字母,所以结果为:true var reg2=/123\D5/;
    _reg.test("12345"); //false
    _reg.test("123b5"); //true
  • \w 匹配字母、数字、下划线 ,三者满足其一即可

      var reg=/\w/;
    reg.test("123"); //存在数字,结果为:true
    reg.test("a"); //true
    reg.test("1"); //true
    reg.test("_"); //true
    reg.test("-"); //false
    reg.test("."); //false reg.test("1."); //true
    reg.test("_\r\n"); //true
    reg.test("\r\n"); //false
  • \W 是\w的取反

  • \s 表示一个空白字符(例如:\r \n \t 空格 。。。)

      var reg=/\s/;
    reg.test("abc def"); //存在一个空白,结果为:true
    reg.test("abc\r123"); //存在一个\r,结果为:true
    reg.test("abc"); //false
  • \S 是\s的取反 `js var reg=/\S/; reg.test(" \r \n "); //全是空白字符,结果为false reg.test("123 abc"); //存在一个空白,结果为true

var reg3=/\s\S/;
reg3.test(" a"); //true
reg3.test("a "); //false
reg3.test("a b"); //true

+ \ 转义字符
```js
var reg=/./; //匹配除了换行符以外的任意字符
var reg=/\./; //匹配.字符 var reg=/\//; //匹配一个正斜杠:/
var reg=/[/]/; //。。。。。。。。。
  • 案例:匹配邮箱

      //asfas.com
    //123ad.com
    //ABC12.com
    //abc_1.com
    var reg =/\w\w\w\w\w\.com/;

字符集合

  • []

      var reg=/[1a2b3]/; //匹配一个字符,这个字符必须是:1/a/2/b/3其中一种,如果是就表示满足,如果不是就不满足
    reg.test("a"); //结果为:true
    reg.test("3"); //结果为:true
    reg.test("fg5678"); //一个符合要求的字符都不存在,结果为:false
    reg.test("a999999"); //结果为:true //升级版
    var reg2=/[123][abc]/; //为了匹配连续2个字符,第一个字符必须在1/2/3之内,第二个字符必须在a/b/c之内
    reg2.test("2a"); //true
    reg2.test("3c"); //true
    reg2.test("1basdfasf"); //true
    reg2.test("asdfasdf1c"); //存在符合条件的1c,结果为:true
    reg2.test("39"); //false var reg2=/[0-9]/; //匹配数字0-9之间,任何一个数字 等价于:/\d/
    var reg3=/[a-z]/; //匹配小写字母
    var reg4=/[A-Z]/; //匹配大写字母
    var reg5=/[a-zA-Z]/;//匹配所有字母
    var reg6=/[A-Za-z]/;//.......... var reg10=/[0-9abc]/;
    reg10.test("3");//true
    reg10.test("five");//false
    reg10.test("banana");//true
  • [^]
      var reg=/[^123]/;   //匹配一个字符,但是这个字符既不是1 并且 不是2 并且 不是3
    reg.test("a"); //true
    reg.test("3"); //false
    reg.test("123"); //没有1,2,3以外的字符,结果为:false
    reg.test("a123"); //存在一个符合条件的a,所以结果为:true

边界

  • ^ 表示字符串最左边
  • $ 表示字符串最右边

      var reg=/^abc/;     //表示以abc开头
    reg.test("123abc123"); //并不是以abc开头,结果为:false
    reg.test("abc123"); //以abc开头,结果为:true
      var reg=/abc$/;     //表示以abc结尾
    reg.test("123abc"); //结果为:true
    reg.test("abc123"); //结果为:false
    reg.test("123bc"); //结果为:false

    `js //匹配一个手机号码 (11位)-->(1)+(10位数字) var reg=/1\d\d\d\d\d\d\d\d\d\d/; reg.test("13166668888a"); //true

    var reg2=/^1\d\d\d\d\d\d\d\d\d\d$/; reg2.test("13166668888a"); //false reg2.test("13166668888"); //true

    var reg3=/^1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$/;


```js
var reg=/^abc$/; //表示字符串abc
reg.test("abc"); //结果为:true
reg.test("123abc"); //结果为:false

量词

  • * 出现0次或多次

      var reg=/\d*/;
    reg.test("123"); //true
    reg.test("234"); //true var reg3=/1\d*/;
    reg3.test("1"); //true
    reg3.test("123"); //true
    reg3.test("a123") //true
    reg3.test("a123456b"); //false
  • + 出现1次或多次(至少一次)
      var reg=/1\d+/;
    reg.test("1"); //false
    reg.test("123"); //true
  • ? 出现0次或一次
      var reg=/1\d?/;
    reg.test("12"); //true
    reg.test("1"); //true
  • {3} 出现3次
      var reg=/1\w{5}/;
    reg.test("1abc"); //false
    reg.test("112345"); //true
    reg.test("1abc12"); //true
  • {3,} 至少出现3次
      var reg=/\d{2,}/;
    reg.test("12"); //true
    reg.test("5"); //false
  • {3,5} 出现3-5次

      var reg=/abc{3}/;           //表示匹配abccc
    reg.test("123abccc123"); //结果为:true var reg3=/(abc){2}/; //匹配abcabc
  • | 或者

      var reg=/abc|123/;  //表示匹配abc或者123
    
      reg.test("abc456"); //true
    
      var reg5=/^abc|123$/;  //匹配以abc开头,或者以123结尾
    reg5.test("abcafsadfasd");//true
    reg5.test("afsdfasdf123");//true var reg6=/^(abc|123)$/; //匹配abc/123
  • () 分组
      //010-88889999
    //0576-12312312
    //0895-1234567
    var reg=/(\d{3,4})-(\d{7,8})/; //匹配电话号码
    var arr="021-33335555".match(/(\d{3,4})-(\d{7,8})/)
    arr[0] //全部
    arr[1] //第一组:区号:021
    arr[2] //第二组:号码:333355555
      var reg=/(\d{3,4})-(\d{7,8})/;
    "021-33335555".replace(/(\d{3,4})-(\d{7,8})/,'区号是:$1')
    //区号是:021
    var str="[object Array]";
var str2="[object Object]";
var str3='[object Function]';
var str4='[object Date]'; str.replace("[object ","").replace("]","").toLowerCase(); str.replace(/\[object /,"").replace(/\]/,"").toLowerCase(); //这样的话正则表达式只匹配一次,也就是说后面的]换不掉
str.replace(/\[object |\]/,"").toLowerCase();
//如何解决?进行全局匹配
str.replace(/\[object |\]/g,"").toLowerCase(); str.replace(/[^\s]+\s/,"").replace(/\]/,"")

案例:匹配邮箱

案例:匹配电话座机

作业1

jquery:选择器引擎:Sizzle大量的使用了正则表达式

    $("#abc")   //id
$(".abc") //类
$("span") //标签

作业2:写一个正则表达式,用于替换一个字符串的前后空格

  • 比如:" asdffsf asdfasfsd asfas a "替换为"asdffsf asdfasfsd asfas a"

学习 正则表达式 js java c# python 通用的更多相关文章

  1. Go学习笔记 - 关于Java、Python、Go编程思想的不同

    ***看了两周七牛团队翻译的<Go语言程序设计>,基本上领略到了Go语言的魅力.学习一个语言,语法什么的任何人都是很容易学会,难就难在充分领略到这门编程语言的思想.*** ## 面向对象 ...

  2. 关于Java、Python、Go编程思想的不同

    Go学习笔记 - 关于Java.Python.Go编程思想的不同 看了两周七牛团队翻译的<Go语言程序设计>,基本上领略到了Go语言的魅力.学习一个语言,语法什么的任何人都是很容易学会,难 ...

  3. Java or Python?测试开发工程师如何选择合适的编程语言?

    很多测试开发工程师尤其是刚入行的同学对编程语言和技术栈选择问题特别关注,毕竟掌握一门编程语言要花不少时间成本,也直接关系到未来的面试和就业(不同企业/项目对技术栈要求也不一样),根据自身情况做一个相对 ...

  4. Java VS Python 应该先学哪个?

    http://blog.segmentfault.com/hlcfan/1190000000361407 http://www.tuicool.com/articles/fqAzqi Java 和 P ...

  5. python学习 正则表达式

    一.re 模块中 1.re.match #从开始位置开始匹配,如果开头没有match()就返回none 语法:re.match(pattern, string, flags=0) pattern 匹配 ...

  6. Android开发学习之路--Java和Js互相调用

      随着前端的火热,以前开发的快速,越来越多的native app在其中融合了h5,就拿淘宝就是很多的h5组成的,一旦出现什么节日,他都可以不用通过更新app来实现界面的改变,而且android和io ...

  7. 关于Visual Studio调试C/C++,JS,PHP,JAVA,Python等语言的方法

    我在开始接触vs code后,确实对它的高颜值和小巧灵活而着迷,但是有一个非常现实的问题,相对于vs来说,vscode是一个代码编辑器,而不是一个IDE,在代码编译运行上存在着极大的问题,尤其是开始编 ...

  8. 最近整理出了有关大数据,微服务,分布式,Java,Python,Web前端,产品运营,交互等1.7G的学习资料,有视频教程,源码,课件,工具,面试题等等。这里将珍藏多年的资源免费分享给各位小伙伴们

    大数据,微服务,分布式,Java,Python,Web前端,产品运营,交互 领取方式在篇尾!!! 基础篇.互联网架构,高级程序员必备视频,Linux系统.JVM.大型分布式电商项目实战视频...... ...

  9. Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net

    Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net 1. 提升单例有能力的1 2. 减少工作数量2 2.1. 减少距 ...

随机推荐

  1. [日常] linux设置环境变量

    比如首先在/etc/profile里面增加这几个环境变量 export PATH=$PATH:/mnt/f/ubuntu/goProject/go/binexport GOROOT=/mnt/f/ub ...

  2. appium---模拟点击事件

    在做自动化的过程中都会遇到一些无法定位到的地方,或者通过元素怎么都定位不成功的地方,这个时候我们可以使用必杀技,通过坐标定位.具体的怎么操作呢? swipe点击事件 前面安静写过一篇关于swipe的滑 ...

  3. pymysql用法,Python连接MySQL数据库

    Pymysql模块是专门用来操作mysql数据库的模块,使用前需要安装,安装指令:pip install pymysql 操作流程: 第一步:import pymysql 第二步:获取数据库的连接 , ...

  4. 《工作笔记:移动web页面前端开发总结》

    工作笔记:移动web页面前端开发总结 移动web在当今的发展速度是一日千里,作为移动领域的门外汉,在这段时间的接触后,发现前端开发这一块做一个小小的总结. 1.四大浏览器内核 1.Trident (I ...

  5. ubuntu下面安装nodejs

    对于刚接触ubuntu的同学来说,一切都是新的,一切都是那么熟悉而又不熟悉的.不管是作为一个前端工程师还是一个后端工程师,我相信大家知道nodejs,但是如果希望自己能够在ubuntu上面使用node ...

  6. 【安富莱】V6,V5开发板用户手册,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔(2019-11-04)

    说明: 1.本教程重在BSP驱动包设计方法和HAL库的框架学习,并将HAL库里面的各种弯弯绕捋顺,从而方便我们的程序设计. 2.本次工程延续以往的代码风格,从底层BSP驱动包到应用代码,变量命名,文件 ...

  7. 第一个月.day1

    1. 编辑器下载 推荐的是hbulider     开发环境 2. 浏览器 推荐chrome 谷歌浏览器学习 3. 建立技术笔记 推荐博客园 Web 本月任务 搭建静态网页. 静态页面:不需要网络请求 ...

  8. UTXO和Account模型一个都不能少

    UTXO对于非区块链从业人员来说可能比较陌生,UTXO的全称是Unspent Transaction Output,这中本聪在比特币中的一个天才设计.而Account模型就很常见,也很容易理解,你银行 ...

  9. 使用IntelliJ IDEA创建第一个Mawen项目

    咳咳...首先各位在学习SSM框架的时候,单个单个学完之后,老夫掐指一算(其实,我是个小鲜肉),各位必定会去整合SSM,这个时候,老夫又掐指一算,各位必定会碰到个mawen的东西,在这里,我可以告诉各 ...

  10. Asp .Net Core Excel导入和导出

    ASP .Net Core使用EPPlus实现Api导入导出,这里使用是EPPlus 4.5.2.1版本,.Net Core 2.2.在linux上运行的时候需要安装libgdiplus . 下面我们 ...