正则表达式 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. November 24th, Week 48th, Sunday, 2019

    Once you replace negative thoughts with positive ones, you will start having positive results. 淘汰消极思 ...

  2. 浅谈python中selenium库调动webdriver驱动浏览器的实现原理

    最近学web自动化时用到selenium库,感觉很神奇,遂琢磨了一下,写了点心得. 当我们输入以下三行代码并执行时,会发现新打开了一个浏览器窗口并访问了百度首页,然而这是怎么做到的呢? from se ...

  3. react 项目引入路由

    下载路由包 npm i react-router-dom -d 前台路由 登陆: /login /login.jsx App.js import React ,{Component} from 're ...

  4. vue axios 在 edge 浏览器下的bug

    Edge 浏览器的版本: Microsoft Edge 42.17134.1.0Microsoft EdgeHTML 17.17134 当请求为POST 时,转换为  GET,并且始终报  “来自缓存 ...

  5. 【Unity游戏开发】Android6.0以上的动态权限申请问题

    一.引子 最近公司的游戏在做安全性测试,期间也暴露出了不少安全上的问题.虽然我们今天要说的权限申请和安全性相关不大,但是也会影响到游戏的使用体验等,所以本篇博客中马三就想和大家谈谈Android6.0 ...

  6. Java题库——Chapter4 循环

    1)How many times will the following code print "Welcome to Java"? int count = 0; while (co ...

  7. Web前端基础(17):jQuery基础(四)

    1. jQuery的属性操作 jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作 html属性操作:是对html文档中的属性进行读取,设置和移除操作.比如at ...

  8. Python 變量 Variable 動態綁定

    為何 Python 變量沒有 Data Type 概念 ? 可以與任意 Data Type 綁定? Python 變量 Variable 與其他程式語言不同之處在於: > variable 不是 ...

  9. Android 视频播放器 (四):使用ExoPlayer播放视频

    一.简介 ExoPlayer是一个Android应用层的媒体播放器,它提供了一套可替换Android MediaPlayer的API,可以播放本地或者是线上的音视频资源.ExoPlayer支持一些An ...

  10. Fundebug前端异常监控插件更新至2.0.0,全面支持TypeScript

    摘要: 是时候支持TS了! Fundebug前端异常监控服务 Fundebug提供专业的前端异常监控服务,我们的插件可以提供全方位的异常监控,可以帮助开发者第一时间定位各种前端异常,包括但不限于Jav ...