学习 正则表达式 js java c# python 通用

正则表达式 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" "[email protected]"
    
      //解决方案:/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"

原文地址:https://www.cnblogs.com/lguow/p/11428389.html

时间: 2024-10-11 20:51:13

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

Java VS Python 应该先学哪个?

http://blog.segmentfault.com/hlcfan/1190000000361407 http://www.tuicool.com/articles/fqAzqi Java 和 Python 是当下两种巨火的巨强大的编程语言,对于刚开始学习编程的同学来说,很是迷惑,最经常问得问题就是,我应该学 Java 还是 Python,是不是 Python 容易学,或者应该给初学者推荐什么编程语言等等这样的问题.因为我是个 Java 程序员,我的意见显然是有偏见的,我会建议你先学 Jav

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

很多测试开发工程师尤其是刚入行的同学对编程语言和技术栈选择问题特别关注,毕竟掌握一门编程语言要花不少时间成本,也直接关系到未来的面试和就业(不同企业/项目对技术栈要求也不一样),根据自身情况做一个相对正确的选择确实要比盲目投入更明智也更高效. 目前最常见的情况是纠结选择 Java 还是 Python?关于这个问题,我搜索了之前的相关博客,也特意请教了几位资深的测试技术专家,在这里做一个汇总整理,集"各家"之言供大家参考.也欢迎各位朋友根据自己的经验回帖补充意见. P.S. 有一点需要强

java正则表达式及java.util.regex包的学习

参考http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html package sunfa.lx; import java.util.Arrays; import java.util.regex.Pattern; /** * java.util.regex包负责对字符序列进行正则表达式匹配 * Pattern负责编译 * Matcher负责匹配 * --------------- * 正

C/C++、Java、Python谁是编译型语言,谁是解释型语言?

最近各大互联网公司线上笔试,编程题目里的编译器只支持C/C++.Java,甚至有的支持javaScrpit和Pascal,就是不支持Python.让一直以来用惯了Python的我直吐血,于是今天痛定思痛还是熟悉一下Java,免得继续被虐.学习的过程中,看到这样一个争论“Java.Python谁是编译型语言,谁是解释性语言?”.我在网上查了很多资料,也结合了自己的理解,下面与大家分享一下. 总的来说,如今编译型语言.解释性语言的分界线不再那么明显,应该避免把语言简单归类为“编译型”和“解释型”.

Java学习之道:Java 导出EXCEL

1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 POI 的功能. 2.POI结构 HSSF - 提供读写Microsoft Excel XLS格式档案的功能. XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能. HWPF - 提供读写Microsoft

对比java和python对比

对比java和python 对比java和python 2011年04月18日 1.难易度而言.python远远简单于java. 2.开发速度.Python远优于java 3.运行速度.java远优于标准python,pypy和cython可以追赶java,但是两者都没有成熟到可以做项目的程度. 4.可用资源.java一抓一大把,python很少很少,尤其是中文资源. 5.稳定程度.python3和2不兼容,造成了一定程度上的混乱以及大批类库失效.java由于有企业在背后支持所以稳定的多. 6.

Javaweb开发学习路线及Java三大框架

Java web开发是什么? Java web开发,是用Java技术来解决相关web互联网领域的技术总和.web包括:web服务器和web客户端两部分.Java在客户端的应用有java applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP和第三方框架等等.Java技术对Web领域的发展注入了强大的动力. Java web 开发 Java web开发学习路线 一:入门阶段 学习目标:Java程序员 1: 熟悉jdk,jvm,eclipse,安装于配置jdk

(数据科学学习手札47)基于Python的网络数据采集实战(2)

一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集实战 2.1 数据要求 这次我们需要采集的数据是知名旅游网站马蜂窝下重庆区域内所有景点的用户评论数据,如下图所示: 思路是,先获取所有景点的poi ID,即每一个景点主页url地址中的唯一数字: 这一步和(数据科学学习手札33)基于Python的网络数据采集实战(1)中做法类似,即在下述界面: 翻页

Go语言和Java、python等其他语言的对比分析

一.Go语言设计初衷 1.设计Go语言是为了解决当时Google开发遇到的问题: 大量的C++代码,同时又引入了Java和Python 成千上万的工程师 数以万计行的代码 分布式的编译系统 数百万的服务器 2.Google开发中的痛点: 编译慢 失控的依赖 每个工程师只是用了一个语言里面的一部分 程序难以维护(可读性差.文档不清晰等) 更新的花费越来越长 交叉编译困难 3.如何解决当前的问题和痛点? Go希望成为互联网时代的C语言.多数系统级语言(包括Java和C#)的根本编程哲学来源于C++,