zoukankan      html  css  js  c++  java
  • javascript之正则表达式学习笔记

    正则表达式的声明

    直接写在//之间

    var reg = /...../;

    使用RegExp()构造函数

    var reg = new RegExp(......);

    ECMAscript 3RegExp对象类似于引用对象,在ECMAscript 5RegExp对象类似于值对象。

    var reg= /a/;
    
    var reg2 =/a/;
    
    console.log(reg === reg2);//ES3标准返回true,ES5返回false
    
    //此时在ES3中reg与reg2指向同一个对象
    
    //在ES5中reg与reg2为两个不同的对象

    转义字符

    正则表达式所有字符都按直面量进行匹配。加入反斜杠()可进行转义。

     

    预定义类

     . [^ ] 除了换行和回车之外的任意字符

     d [0-9] 数字字符digit

     D [^0-9] 非数字字符

     w [a-zA-Z0-9_] 单词字符(所有的字母数字和_ ) word

     W [^a-zA-Z0-9_] 非单词字符

     s [f v] 不可见字符 space

     S [^f v] 可见字符

    量词

    "*" 重复零次或更多 x>=0

    "+" 重复一次或更多次 x>=1

    "?" 重复零次或一次  x=(0||1)

    {n} n x=n

    {n,} 重复n次或更多  x>=n

    {n,m} 重复出现的次数比n多但比mn<=x<=m

    非贪婪匹配

    当以上字符后再加入一个?时将进行非贪婪匹配如*?,??,+?.{n,m}?

    进行贪婪匹配时将尽可能少的匹配内容

    /a+/匹配aaa时将回匹配全部a即匹配“aaa”,而/a+?/匹配aaa时将匹配一个“a”。

    需要注意的是非贪婪匹配从第一个匹配到的值开始。

    例如使用/a+?b/匹配aaab时并不会按最少的匹配ab。而是匹配aaab。这是因为匹配是从第一个a开始匹配所以也会把之前的a都匹配到。

    选择

    “|”分割用于选择的字符

    a|b|c可匹配a或者b或者c

    分组

    “( )”可用于分组调用exec方法返回Array对象,0位置为匹配到的完整内容,之后位置为”( )”所分组的数据。

    var str = "abcdefg";
    
    var r = /c(d(e))/;
    
    console.log(r.exec(str));  //["cde", "de", "e", index: 2, input: "abcdefg"]

    在“(”后跟“?:”表示不获取

    var str = "abcdefg";
    
    var r = /c(?:d(e))/;
    
    console.log(r.exec(str)); // ["cde", "e", index: 2, input: "abcdefg"]  不获取de

    元字符[ ]

    匹配一个出现在 [] 中的字符。

    var str1 = "abcde";
    
    var str2 = "fghig";
    
    var r = /[bg]/;
    
    console.log(r.exec(str1)[0]); //b
    
    console.log(r.exec(str2)[0]); //g

    使用 [] 匹配多个字符:[a-z] [A-Z]

    表示否定意思:[^abc]  不匹配^之后的字符

    元字符^$

    ^ 表示必须以某某开头

    $ 表示必须以某某结尾

    var r1 = /^a/;
    
    var r2 = /a$/;
    
    str1 = "ab";
    
    str2 = "ba";
    
    console.log(r1.test(str1));  //true
    
    console.log(r1.test(str2));  //false
    
    console.log(r2.test(str1));  //false
    
    console.log(r2.test(str2));  //true

    当同时出现^$时表示精确匹配

    var r1 = /^asd$/;
    
    str1 = "asd";
    
    str2 = "a-s-d";
    
    console.log(r1.test(str1));  //true
    
    console.log(r1.test(str2));  //false

    正则替换与组引用

    replace方法第一个参数可以用正则表达式来表示需要被替换的内容。

    var r1 = /^asd$/;
    
    str1 = "LandMine LLLLLL";
    
    str1 = str1.replace(/L/g,"l"); //g表示全局匹配
    
    console.log(str1);  //landMine llllll

    第二个参数出现$后跟数字表示正则组引用

    var s = '1991-1-2';
    
    s = s.replace( /(d+)-(d+)-(d+)/g, "$1年$2月$3日" );
    
    console.log(s); //1991年1月2日
  • 相关阅读:
    直接插入排序
    合并排序--分治法思想
    scanf printf函数返回值
    转自CSDN,关于状态机
    关于制表符
    网上找的一篇博文,原文搞错了,应该是 ,本文已改正!——回车CR和换行line feed
    再看c语言之getchar/putchar
    使用FL2440之问题1
    Java:String、StringBuffer和StringBuilder的区别
    编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码
  • 原文地址:https://www.cnblogs.com/LandMine/p/5373651.html
Copyright © 2011-2022 走看看