zoukankan      html  css  js  c++  java
  • 关于部分正则表达式

    首先声明,大部分的内容摘抄自大神http://javascript.ruanyifeng.com/ 中关于正则的内容,外加上一些简单的个人观点及举例,如有侵权,请指出,谢谢。

    一、正则对象的属性方法
    (1)test()方法,返回一个布尔值,判断字符串中是否有正则中的字符
    var regex=/x/;
    var str="xyz";
    console.log(regex.test(str)); // 输出结果为true
    var regex=/xx/;
    var str="xyz";
    console.log(regex.test(str)); // 输出结果为false
     判断必须完全符合正则中的规则,才会返还true,否则为false。


    (2)exec() 正则对象的exec方法,可以返回匹配结果。如果发现匹配,就返回一个数 组,每个匹配成功的子字符串,就是数组成员,否则返回null。

        var regex=/x/;

        var str="x,x";

        console.log(regex.exec(str)); // ["x", index: 0, input: "x,x"] 输出结果为一个数组,数组内有其元素,及index和input两个属性,input:整个原字符串。 index:整个模式匹配成功的开始位置(从0开始)

    (3)lastIndex : 表示正则对象从第几个字符开始匹配,可以通过regex.lastIndex=2; 设置举例
    var regex=/x/g;
    regex.lastIndex=2;
    var str="x,xzxczxadasdasddd";
    console.log(regex.exec(str)); //["x", index: 2, input: "x,xzxczxadasdasddd"] 如果没有 regex.lastIndex=2; 则此条应为Index属性为0
    console.log(regex.exec(str)); // ["x", index: 4, input: "x,xzxczxadasdasddd"]

    以上方法均为正则调用字符串

    二、字符串对象的方法

    (1)match ()字符串对象的match方法对字符串进行正则匹配,返回匹配结果。
    var str1="abccbc";
    var regex1=/a/;
    var regex2=/1/;

    console.log(str1.match(regex1)); //["a", index: 0, input: "abccbc"]
    console.log(str1.match(regex2)); //null

    需特别注意,无论是在正则后加全局g还是lastIndex 都无法影响match的结果,这点和exec()方法不一样。


    (2)search () 字符串对象search 返回满足正则的第一个元素的索引位置,(位置从0开始);

    var str1="dddabccbc";
    var regex1=/a/;

    console.log(str1.search(regex1)); // 输出结果为3

    需特别注意,该方法一样不受g修饰符和lastIndex的影响

    (3)replace 用来搜索并替换字符串中的内容,有两个参数,第一个参数是搜索要替换的数值,第二个是用来替换的的值
    var str1="dddabccbc";
    var regex1=/a/;

    console.log(str1.replace(/a/,"c")); //输出结果为dddcbccbc ,替换了第一个a的值,
    注意,replace方法会受到修饰符g的影响,如果在正则内加了g后,意思为替换字符串内所有正则内的内容。

    var str1="dddabaabc";
    var regex1=/a/;

    console.log(str1.replace(/a/g,"c")); //输出结果为dddcbccbc 替换了全部的a为c


    (4)split : 同字符串中的split方法。

    三、匹配规则

    (1)点字符 /./ 代表除了回车 换行 行分隔符u2028 段分割符 u2029以外的任何字符
    举例
    var str1="aXc";
    var reg=/a.c/;

    console.log(reg.test(str1));// 结果为true 在例子中.字符就代表了X

    var str2="a c";
    console.log(reg.test(str2)); 结果为false,.字符替代不了

    (2) 位置字符: 位置字符主要有两个 第一个是^ 代表开头 一个是$ 代表以什么结尾分别举例
    var str1="aXdssac";
    var reg1=/^a/; //代表以a为开始
    var reg2=/sac$/; //代表以sac结尾

    console.log(reg1.test(str1));// 结果为true
    console.log(reg2.test(str1));// 结果为true

    (3) 竖线符号| 可以理解成 或(or) 的关系

    举例:
    var str1="aXdssac";
    var reg=/ss|123/; // 有ss或者123
    console.log(reg.test(str1));// 因为是或的关系,有一为真,既为真,所以结果为true;

    (4)重复类{}: 表示连续重复的次数,注意,{}当中可以有一个参数,也可以有一个参数加上一个,以及两个参数三种方式
    举例
    1、
    var str1="aXdsssac";
    var reg=/s{1}/; //代表s恰好重复1次==/ss/
    console.log(reg.test(str1)); // 所以结果为true;
    2、
    var str1="aXdsssac";
    var reg=/s{2,}/; //代表s至少重复2次,可以为2次到无数次,
    console.log(reg.test(str1)); //结果为true
    3、
    var str1="aXdsssac";
    var reg=/s{3,6}/; //代表s循环3到6次
    console.log(reg.test(str1)); //结果为true

    (5)量词类: 量词类用于设定某个模式出现的次数,具体分为三种符号
    ? 表示出现0次到1次 等同于{0,1}
    * 表示出现0次或多次,等同于{0,}
    + 表示出现1次或多次,等同{1,}
    因和上面的重复类相似,就不再单独举例说明

    (6) 贪婪模式: 在量词类中,默认情况下都是最大匹配,什么是最大匹配呢?就是一直匹配到不再符合条件为止,这种模式被称为贪婪模式。举例说明


    var str1="Xdsssc";
    var reg=/a*c/;
    console.log(reg.test(str1)); //true
    console.log(str1.match(reg)); //返回c


    var str1="Xdaasssc";
    var reg=/a+/;
    console.log(reg.test(str1)); //true
    console.log(str1.match(reg)); //因为贪婪模式,所以返回值为aa 

    特别注意,如果想要中止贪婪模式,只需要在*或者+ 后面添加?即可取消贪婪模式,而且特别注意,任何正则在单独添加*或者?时,其返回的结果都为true(因为可以是0次,待测试)

    (7) 字符类:
    字符类代表有一系列的字符可以选择,只要满足其中某一个即可 其书写规范为/[xyz]/ 特别注意它和/xyz/的区别,前者代表 x,y,z中任意一个元素即可,而后者则代表xyz这个整体字符


    /[abc]/.test('hello world') // false /[abc]/.test('apple') // true


    (8) 脱字符: 脱字符是和字符类配合使用,一般增加在字符类的前边,代表除了字符类的字符外,其他的都可以匹配,格式为/[^xyz]/ 代表除了x.y.z外的所有字符都能进行匹配。

    特别注意[^] 代表任意字符!


    (9) 连字符 - 书写格式/[a-z]/ 代表从a到z 特别注意,如果连字符- 没出现在[]中时,则仅代表其本身的意思还有/[1-42]/ 代表的1-4。而不是1-42,特别注意!


    (10)转义符 :正则表达式中那些有特殊含义的字符,如果要匹配它们本身,就需要在它 们前面要加上反斜杠。比如要匹配加号,就要写成\+ 。正则模式中,需要用斜杠转义的,

    一共有12个字符:^、.、[、$、(、)、 |、*、+、?、{和\。需要特别注意的是,如果使用RegExp方法生成正则 对象,转义需要使用两个斜杠,因为字符串内部会先转义一次。

    举例:
    (new RegExp('1+1')).test('1+1') // false
    (new RegExp('1\+1')).test('1+1') // true

    (11)修饰符 : 修饰符代表的额外的规则,前面我们用到的//g 就是一种修饰符
    g:默认情况下,第一次匹配成功后,正则对象就停止向下匹配了。g修饰符 表示全局匹配(global),加上它以后,正则对象将匹配全部符合条件的 结果,主要用于搜索和替换。
    i:默认情况下,正则对象区分字母的大小写,加上i修饰符以后表示忽略大 小写(ignorecase)。

    (12)预定义模式 : 预定义模式指的是某些常见模式的简写方式。
    d 匹配0-9之间的任一数字,相当于[0-9]。
    D 匹配所有0-9以外的字符,相当于[^0-9]。
    w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_].
    W 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_].
    s 匹配空格(包括制表符、空格符、断行符等),相等于[ vf].
    S 匹配非空格的字符,相当于[^ vf]
     匹配词的边界.
    B 匹配非词边界,即在词的内部

    (13)组匹配:正则表达式中的()代表组,每一个()代表一个组,举例
    /abc+/ 代表的是a,b 以及至少一个c
    /(abc)+/ 代表至少一个abc,此时的abc为一个整体,这种模式就叫组匹配。

  • 相关阅读:
    测量MySQL的表达式和函数的速度
    MySQL中的比较操作符<=>
    Python中的args和kwargs
    MySQL8新特性(2)--mysql的升级过程
    MySQL8新特性(1)--原子DDL
    PostgreSQL中的一些日志
    PostgreSQL的表空间
    [九]基础数据类型之Boolean详解
    [八]基础数据类型之Double详解
    [七]基础数据类型之Float详解
  • 原文地址:https://www.cnblogs.com/yuyufeng/p/5592944.html
Copyright © 2011-2022 走看看