zoukankan      html  css  js  c++  java
  • js 正则表达式

    JavaScript通过内置对象RegExp来支持正则表达式

    两种实例化方法:

    1. 字面量   var reg= / is /g;
    2. 构造函数 new RegExp(‘’\bis\b,’g’);  反斜线需要转义

    修饰符

    g:全局匹配 (global)

    i:忽略大小写 (ignore case)

    m:多行匹配(multiple lines)

    元字符

    1. 原义文本字符
    2. 元字符(在正则表达式中有特殊含义的非字母字符)

    例如: 单词边界

    .* + ? $ . | () {} []

    字符

    含义

    水平制表符

    v

    垂直制表符

    换行符

    回车符

    空格符

    f

    换页符

    cX

    与X对应的控制字符(Ctrl+X)

    字符类

    可以使用[]构建一个简单的类

    表达式[abc]就是把abc归为一类,表达式可以匹配这类的字符

    ‘a1b2c3’.replace(/[abc]/g,’X’);àX1X2X3

    字符类取反

    [^…]

    ‘abcdef123’.replace(/[^abc]/g,”Q”);  à”abcQQQQQQ”

    范围类

    [0-9]:代表0-9

    [a-zA-Z]: 代表字母  在字符类里可以连续写

    预定义类

    字符

    等价类

    含义

    .

    [^ ]

    除了回车和换行的所有字符

    d

    [0-9]

    数字类

    D

    [^0-9]

    非数字字符

    w

    [a-zA-Z0-9_]

    单词字符(字母,数字下划线)

    W

    [^a-zA-Z0-9_]

    非单词字符

    s

    [ fx0B]

    空白符

    S

    [^ fx0B]

    非空白符

    边界

    字符

    含义

    ^

    $

    

    单词边界

    B

    非单词边界

    :

    多行处理:

    ‘@123

    @123

    @123’.replace(/^@d/g,’X’);-->

    “X23

    @123

    @123”

    ‘@123

    @123

    @123’.replace(/^@d/gm,’X’);-->

    “X23

    X23

    X23”

    量词

    字符

    含义(使用数学的集合表示)

    ?

    {0,1}

    +

    [1,∞)

    *

    [0, ∞)

    {n}

    {n}

    {n,m}

    [n,m]

    {n,}

    [n, ∞)

    1. /d?/  à
    1. /d+/  à

    3./d*/

    1. /d{5}/

    贪婪模式(默认的模式)

    ‘12345678’.replace(/d{3,6}/,”X”);  à’X78’

    系统会尽可能多的匹配,直到匹配失败

    非贪婪模式

    做法很简单,在量词后面加个问号 d{3,6}?

    分组

    匹配dog{3}出现三次àdog{3}

    使用()可以达到分组的效果  使量词作用于分组

    (dog){3}

    可以使用|达到或的效果

    do(g|c)at

    反向引用(分组)

    ‘2016-8-29’.replace( /(d{4})-(d{2})-(d{2})/g  , ’$1/$2/$3’);

    忽略分组

    如果不希望捕获分组,可以在分组内加上?:就可以

    (?:dog){3}

    前瞻

    名称

    正则

    含义

    正向前瞻

    Exp(?=assert)

    负向前瞻

    Exp(?!assert)

    正向后瞻

    Exp(?<=assert)

    Javascript不支持

    负向后瞻

    Exp(?<!assert)

    Javascript不支持

    / w( ?=d ) /g à

    对象属性

    l  global:是否全文搜索,默认值为false

    l  multiplelines:是否多行搜索,默认为false

    l  ignoreCase:  是否忽略大小写,默认值为false

    l  lastIndex:当前表达式匹配内容的最后一个字符的下一个位置

    l  source:正则表达式的文本内容

    var exp=/is/;

    exp.global(false或true为只读属性);

    正则表达式的相关方法

    1. test方法:

    regexp.test(string);

    用来判断是否匹配成功

    非全局搜索中,lastIndex不生效

    1. exec方法:

    如果匹配到,就返回一个数组,否则返回null

    返回的数组有两个属性:

    l  index:声明匹配文本的第一个字符的位置

    l  input:存放被检索字符串string

    • 非全局调用:返回数组的第一个元素为 与正则表达式相匹配的文本,第二个为 与reg对象子表达式(分组)想匹配的文本。。。

    例如:var reg=/ d (w) d /;

          var  arr=reg.test(‘2a32m3’);  àarr=[ ‘2a3’ , ’a’ ];

          arr.index=0;

          reg.lastIndex不起作用      

    • 全局调用:
    1. search方法

    string.search(string|reg);

    用于检索字符串中指定的子字符串,或检索正则表达式相匹配的子字符串

    返回第一个匹配结果index,如果没有找到返回-1

    该方法忽略g标志并且总是从哪个第一个字符开始搜索

    1. match方法

    string.match(reg);

    • 非全局调用:和exec方法一样
    • 全局调用:返回结果数组,没有分组信息,没有index属性和input属性
    1. split方法

    string.split(reg|string);

    1. string.replace(reg,function);

    该函数有4个参数:

    • 匹配的字符串
    • 分组
    • index
    • 原字符串

    string.replace(/d/g,function(s){

      return parseInt( s )+1;

    });

    string.replace(reg,string);

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    svn 启动项目报错,项目被lock
    BigDecimal 用法详解
    MySQL 规范
    Tomcat 详解URL请求
    Tomcat Servlet工作原理
    Tomcat Context容器和Wrapper容器
    Tomcat 核心组件 Container容器相关
    Tomcat 核心组件 Connector
  • 原文地址:https://www.cnblogs.com/zhuxiang1633/p/9600449.html
Copyright © 2011-2022 走看看