zoukankan      html  css  js  c++  java
  • 正则大全

    :replace函数,为写自己的js模板做准备 待完善 function

    声明&用法

    //数组:
    var arr=[];//字面量            
    var arr=new Array();//构造函数
    //对象:
    var obj={};//字面量            
    var obj=new Object();//构造函数
    //正则:
    var regExp=/a/gi;//字面量      
    var regExp=new RegExp('a','gi');//构造函数
                                         
    //用法一
    var regExp=new RegExp('a','gi');
    'abcdefgABCDEFGabcdefg'.replace(regExp,"~");
    '~bcdefg~BCDEFG~bcdefg'
    //用法二
    'abcdefgABCDEFGabcdefg'.replace(/a/gi,"~");
    '~bcdefg~BCDEFG~bcdefg'
    

    global ignore 选项

    //global用于所有字符串,而非在找到第一个匹配项时停止
    //ignore 忽略大小写进行匹配
    'abcdefgABCDEFGabcdefg'.replace(/b/,"~");  //"a~cdefgABCDEFGabcdefg"
    'abcdefgABCDEFGabcdefg'.replace(/b/g,"~"); //"a~cdefgABCDEFGa~cdefg"
    'abcdefgABCDEFGabcdefg'.replace(/b/i,"~"); //"a~cdefgABCDEFGabcdefg"
    'abcdefgABCDEFGabcdefg'.replace(/b/gi,"~");//"a~cdefgA~CDEFGa~cdefg"
    

    正则的懒惰 贪婪

    //懒惰 
    
    
    //贪婪
    
    
    

    $ 字符的含义。

    //$&匹配项的文本
    'abcdefgABCDEFGabcdefg'.replace(/b/,"$&");
    "abcdefgABCDEFGabcdefg"
    'abcdefgABCDEFGabcdefg'.replace(/b/,"$&---");
    'ab---cdefgABCDEFGabcdefg'
    
    //$`匹配项左侧的文本
    'abcdefgABCDEFGabcdefg'.replace(/b/,"$`");
    "aacdefgABCDEFGabcdefg"
    
    //$' 匹配项右侧的文本 (一直到右侧完,不会到下个匹配项就停止)
    'abcdefgABCDEFGabcdefg'.replace(/b/,"$'");
    "acdefgABCDEFGabcdefgcdefgABCDEFGabcdefg"
    
    'abcdefgABCDEFGabcdefg'.replace(/b/g,"$'");
    "acdefgABCDEFGabcdefgcdefgABCDEFGacdefgcdefg"
    
    //$$ $字符
    'abcdefgABCDEFGabcdefg'.replace(/b/,"$$");
    "a$cdefgABCDEFGabcdefg"
    
    //$n
    $1 ..$99 一个正则中的分组,具体一个匹配项(全局可能多个匹配项)中的 第几组匹配到的东西。关于分组
    分组:正则的 具体一个匹配项(全局可能多个匹配项)中的()个数,$1代表具体一个匹配项中的第一个()匹配的内容...
    'abcdefgABCDEFGabcdefg'.replace(/(b)/,"$&---");
    "ab---cdefgABCDEFGabcdefg"
    'abcdefgABCDEFGabcdefg'.replace(/(b)/,"$1---");
    "ab---cdefgABCDEFGabcdefg"
    //$2没匹配到时,就把$2关键字当普通字符串
    'abcdefgABCDEFGabcdefg'.replace(/(b)/,"$2");
    "a$2cdefgABCDEFGabcdefg"
    
    //关于分组几个括号,几个分组。下面例子c虽然匹配,但不是$2
    'abcdefgABCDEFGabcdefg'.replace(/(b)c/gi,'(#$1#$2)');
    "a(#b#$2)defgA(#B#$2)DEFGa(#b#$2)defg"
    'abcdefgABCDEFGabcdefg'.replace(/(b)(c)/gi,'(#$1#$2)');
    "a(#b#c)defgA(#B#C)DEFGa(#b#c)defg"
    
    'abcdefgABCDEFGabcdefg'.replace(/(b)(c)/,"$&---");
    "abc---defgABCDEFGabcdefg"
    'abcdefgABCDEFGabcdefg'.replace(/(b)(c)/,"$1---$2???");
    "ab---c???defgABCDEFGabcdefg"
    
    'abcdefgABCDEFGabcdefg'.replace(/(b)(c)/gi,"$&---");
    "abc---defgABC---DEFGabc---defg"
    'abcdefgABCDEFGabcdefg'.replace(/(b)(c)/gi,"$1--$2??");
    "ab--c??defgAB--C??DEFGab--c??defg"
    

    * +正则在函数match replace中的匹配次数 问题 ?

    // + *的区别
    'a-b-c'.match(/w*/g)
    ["a", "", "b", "", "c", ""]
    'a-b-c'.match(/w+/g)
    ["a", "b", "c"]
    //分组中* +组合
    'abc12345'.match(/([^d]*)(d+)/g)
    ["abc12345"]
    'abc12345'.match(/([^d]*)(d*)/g)
    ["abc12345", ""]
    
    reg = /[^/]+/;
    '/ab'.match(reg)//["ab"]
    reg = /([^/]+)/;
    '/ab'.match(reg)//["ab","ab"]
    

    replace(regExp,function(){})的使用

    循环(匹配次数):regExp的匹配选项后
    

    字符集[]中,不会出现两位数。

    //[]中,不会出现两位数
    //匹配18-65
    var reg = /[18-65]/;//Invalid regular expression: /[18-65]/: Range out of order in character class
    reg = /(18|19)|([2-5]d)|(6[0-5])/;//我们拆成3部分来匹配 18-19  20-59 60-65 
    reg.test('50')//true
    //匹配 8-12 
    reg = /[8-9]|(1[0-2])/;
    reg.test('8')//true
    

    字符集[]中,字符没有特殊含义 像w d这样的还是有特殊含义

    //  '/'不需要/
    reg = /[^/]+/;
    '/ab'.match(reg)//["ab"]
    
    //  '.'代表'.'
    reg = /./;
    'b'.match(reg)//["b"]
    reg = /[.]/;
    'b'.match(reg)//null
    reg = /[.]/;
    '.'.match(reg)//["."]
    
    //  'd'代表0-9之间的任意一个数字
    reg = /[d]/;
    'ssss'.match(reg)//null
    reg = /[d]/;
    'd'.match(reg)//null
    reg = /[d]/;
    '12'.match(reg)//["1"]
    reg = /[d]/g;
    '12'.match(reg)//["1","2"]
    

    分组&分组中的捕获和非捕获

    //分组内嵌套分组,从外到内依次赋值给$n引用
    "ssass".match(/a((s)s)/,(...args)=>{console.log(args)})//"ass", "ss", "s"
    "ssass".match(/a((s)s)/,(all,$1,$2)=>{console.log(all,$1,$2)})
    //非捕获,不会将分组,赋值给$n引用,这里的(?:s)不会赋值给$2
    "ssass".match(/a((?:s)s)/,(...args)=>{console.log(args)})//["ass", "ss", index: 2, input: "ssass"]
    "ssass".match(/a((?:s)s)/,(all,$1,$2)=>{console.log(all,$1,$2)})//["ass", "ss", index: 2, input: "ssass"]
    

    基础正则

    ============================================正则表达式基础知识==============================================
    ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a" 
    $ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A" 
    * 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa 
    + 匹配前面元字符1次或多次,/ba+/将匹配ba,baa,baaa 
    ? 匹配前面元字符0次或1次,/ba?/将匹配b,ba 
    (x) 匹配x保存x在名为$1...$9的变量中 
    x|y 匹配x或y 
    {n} 精确匹配n次 
    {n,} 匹配n次以上 
    {n,m} 匹配n-m次 
    [xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) 
    [^xyz] 不匹配这个集合中的任何一个字符 
    [] 匹配一个退格符 
     匹配一个单词的边界 
    B 匹配一个单词的非边界 
    cX 这儿,X是一个控制符,/cM/匹配Ctrl-M 
    d 匹配一个字数字符,/d/ = /[0-9]/ 
    D 匹配一个非字数字符,/D/ = /[^0-9]/ 
    
     匹配一个换行符 
    
     匹配一个回车符 
    s 匹配一个空白字符,包括
    ,
    ,f,	,v等 
    S 匹配一个非空白字符,等于/[^
    f
    	v]/ 
    	 匹配一个制表符 
    v 匹配一个重直制表符 
    w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[w]匹配"$5.98"中的5,等于[a-zA-Z0-9] 
    W 匹配一个不可以组成单词的字符,如[W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。
    
    d : 0-9之间的任意一个数字  d只占一个位置
    w : 数字,字母 ,下划线 0-9 a-z A-Z _
    s : 空格或者空白等
    D : 除了d
    W : 除了w
    S : 除了s
     . : 除了
    之外的任意一个字符
      : 转义字符
     | : 或者
    () : 分组
    
     : 匹配换行符
     : 匹配边界 字符串的开头和结尾 空格的两边都是边界 => 不占用字符串位数
     ^ : 限定开始位置 => 本身不占位置
     $ : 限定结束位置 => 本身不占位置
    [a-z] : 任意字母 []中的表示任意一个都可以
    [^a-z] : 非字母 []中^代表除了
    [abc] : abc三个字母中的任何一个 [^abc]除了这三个字母中的任何一个字符
    
  • 相关阅读:
    c#多线程
    把.NET程序部署到没有安装.NET Framwork的机器上
    Java字符编码转换过程说明
    Window 消息大全使用详解
    Regsvr32
    VC++的应用程序框架中各类之间的访问方法
    java接收中文输入并正常显示
    Visual C#中的数据绑定
    截取系统 API 调用(转)
    几个操作文件的API函数
  • 原文地址:https://www.cnblogs.com/leee/p/5543663.html
Copyright © 2011-2022 走看看