• 正则表达式


    正则表达式元字符是包含特殊含义的字符。它们有一些特殊功能,可以控制匹配模式的方式。反斜杠后的元字符将失去其特殊含义。

    字符类:单个字符和数字

    元字符/元符号

    匹配情况

    .

    匹配除换行符外的任意字符

    [a-z0-9]

    匹配括号中的字符集中的任意字符

    [^a-z0-9]

    匹配任意不在括号中的字符集中的字符

    \d

    匹配数字

    \D

    匹配非数字,同[^0-9]相同

    \w

    匹配字母和数字及_

    \W

    匹配非字母和数字及_

    字符类:空白字符

    元字符/元符号

    匹配情况

    \0

    匹配null字符

    \b

    匹配空格字符

    \f

    匹配进纸字符

    \n

    匹配换行符

    \r

    匹配回车字符

    \t

    匹配制表符

    \s

    匹配空白字符、空格、制表符和换行符

    \S

    匹配非空白字符

    字符类:锚字符

    元字符/元符号

    匹配情况

    ^

    行首匹配

    $

    行尾匹配

    \A

    只有匹配字符串开始处

    \b

    匹配单词边界,词在[]内时无效

    \B

    匹配非单词边界

    \G

    匹配当前搜索的开始位置

    \Z

    匹配字符串结束处或行尾

    \z

    只匹配字符串结束处

    字符类:重复字符

    元字符/元符号

    匹配情况

    x?

    匹配0个或1x

    x*

    匹配0个或任意多个x

    x+

    匹配至少一个x

    (xyz)+

    匹配至少一个(xyz)

    x{m,n}

    匹配最少m个、最多nx

    字符类:替代字符

    元字符/元符号

    匹配情况

    this|where|logo

    匹配thiswherelogo中任意一个

    字符类:记录字符

    元字符/元符号

    匹配情况

    (string)

    用于反向引用的分组

    \1$1

    匹配第一个分组中的内容

    \2$2

    匹配第二个分组中的内容

    \3$3

    匹配第三个分组中的内容

    /*使用点元字符*/

    var pattern = /g..gle/; //.匹配一个任意字符

    var str = 'google';

    alert(pattern.test(str));

    /*重复匹配*/

    var pattern = /g.*gle/; //.匹配0个一个或多个

    var str = 'google'; //*,?,+,{n,m}

    alert(pattern.test(str));

    /*使用字符类匹配*/

    var pattern = /g[a-zA-Z_]*gle/; //[a-z]*表示任意个a-z中的字符

    var str = 'google';

    alert(pattern.test(str));

    var pattern = /g[^0-9]*gle/; //[^0-9]*表示任意个非0-9的字符

    var str = 'google';

    alert(pattern.test(str));

    var pattern = /[a-z][A-Z]+/; //[A-Z]+表示A-Z一次或多次

    var str = 'gOOGLE';

    alert(pattern.test(str));

    /*使用元符号匹配*/

    var pattern = /g\w*gle/; //\w*匹配任意多个所有字母数字_

    var str = 'google';

    alert(pattern.test(str));

    var pattern = /google\d*/; //\d*匹配任意多个数字

    var str = 'google444';

    alert(pattern.test(str));

    var pattern = /\D{7,}/; //\D{7,}匹配至少7个非数字

    var str = 'google8';

    alert(pattern.test(str));

    /*使用锚元字符匹配*/

    var pattern = /^google$/; //^从开头匹配,$从结尾开始匹配

    var str = 'google';

    alert(pattern.test(str));

    var pattern = /goo\sgle/; //\s可以匹配到空格

    var str = 'goo gle';

    alert(pattern.test(str));

    var pattern = /google\b/; //\b可以匹配是否到了边界

    var str = 'google';

    alert(pattern.test(str));

    /*使用或模式匹配*/

    var pattern = /google|baidu|bing/; //匹配三种其中一种字符串

    var str = 'google';

    alert(pattern.test(str));

    /*使用分组模式匹配*/

    var pattern = /(google){4,8}/; //匹配分组里的字符串4-8

    var str = 'googlegoogle';

    alert(pattern.test(str));

    var pattern = /8(.*)8/; //获取8..8之间的任意字符

    var str = 'This is 8google8';

    str.match(pattern);

    alert(RegExp.$1); //得到第一个分组里的字符串内容

    var pattern = /8(.*)8/;

    var str = 'This is 8google8';

    var result = str.replace(pattern,'<strong>$1</strong>'); //得到替换的字符串输出

    document.write(result);

    var pattern = /(.*)\s(.*)/;

    var str = 'google baidu';

    var result = str.replace(pattern, '$2 $1'); //将两个分组的值替换输出

    document.write(result);

    贪  婪

    惰  性

    +

    +?

    ?

    ??

    *

    *?

    {n}

    {n}?

    {n,}

    {n,}?

    {n,m}

    {n,m}?

    /*关于贪婪和惰性*/

    var pattern = /[a-z]+?/; //?号关闭了贪婪匹配,只替换了第一个

    var str = 'abcdefjhijklmnopqrstuvwxyz';

    var result = str.replace(pattern, 'xxx');

    alert(result);

    var pattern = /8(.+?)8/g; //禁止了贪婪,开启的全局

    var str = 'This is 8google8, That is 8google8, There is 8google8';

    var result = str.replace(pattern,'<strong>$1</strong>');

    document.write(result);

    var pattern = /8([^8]*)8/g; //另一种禁止贪婪

    var str = 'This is 8google8, That is 8google8, There is 8google8';

    var result = str.replace(pattern,'<strong>$1</strong>');

    document.write(result);

     

    /*使用exec返回数组*/

    var pattern = /^[a-z]+\s[0-9]{4}$/i;

    var str = 'google 2012';

    alert(pattern.exec(str)); //返回整个字符串

    var pattern = /^[a-z]+/i; //只匹配字母

    var str = 'google 2012';

    alert(pattern.exec(str)); //返回google

    var pattern = /^([a-z]+)\s([0-9]{4})$/i; //使用分组

    var str = 'google 2012';

    alert(pattern.exec(str)[0]); //google 2012

    alert(pattern.exec(str)[1]); //google

    alert(pattern.exec(str)[2]); //2012

    /*捕获性分组和非捕获性分组*/

    var pattern = /(\d+)([a-z])/; //捕获性分组

    var str = '123abc';

    alert(pattern.exec(str));

    var pattern = /(\d+)(?:[a-z])/; //非捕获性分组

    var str = '123abc';

    alert(pattern.exec(str));

    /*使用分组嵌套*/

    var pattern = /(A?(B?(C?)))/; //从外往内获取

    var str = 'ABC';

    alert(pattern.exec(str));

    /*使用前瞻捕获*/

    var pattern = /(goo(?=gle))/; //goo后面必须跟着gle才能捕获

    var str = 'google';

    alert(pattern.exec(str));

    /*使用特殊字符匹配*/

    var pattern = /\.\[\/b\]/; //特殊字符,用\符号转义即可

    var str = '.[/b]';

    alert(pattern.test(str));

    /*使用换行模式*/

    var pattern = /^\d+/mg; //启用了换行模式

    var str = '1.baidu\n2.google\n3.bing';

    var result = str.replace(pattern, '#');

    alert(result);

    三.常用的正则

     

    1.检查邮政编码

    var pattern = /[1-9][0-9]{5}/; //6位数字,第一位不能为0

    var str = '224000';

    alert(pattern.test(str));

     

    2.检查文件压缩包

    var pattern = /[\w]+\.zip|rar|gz/; //\w表示所有数字和字母加下划线

    var str = '123.zip'; //\.表示匹配.,后面是一个选择

    alert(pattern.test(str));

    3.删除多余空格

    var pattern = /\s/g; //g必须全局,才能全部匹配

    var str = '111 222 333';

    var result = str.replace(pattern,''); //把空格匹配成无空格

    alert(result);

    4.删除首尾空格

    var pattern = /^\s+/; //强制首

    var str = '          goo  gle            ';

    var result = str.replace(pattern, '');

    pattern = /\s+$/; //强制尾

    result = result.replace(pattern, '');

    alert('|' + result + '|');

    var pattern = /^\s*(.+?)\s*$/; //使用了非贪婪捕获

    var str = '            google          ';

    alert('|' + pattern.exec(str)[1] + '|');

    var pattern = /^\s*(.+?)\s*$/;

    var str = '            google          ';

    alert('|' + str.replace(pattern, '$1') + '|'); //使用了分组获取

    5.简单的电子邮件验证

    var pattern = /^([a-zA-Z0-9_\.\-]+)@([a-zA-Z0-9_\.\-]+)\.([a-zA-Z]{2,4})$/;

    var str = 'yc60.com@gmail.com';

    alert(pattern.test(str));

    var pattern = /^([\w\.\-]+)@([\w\.\-]+)\.([\w]{2,4})$/;

    var str = 'yc60.com@gmail.com';

    alert(pattern.test(str));

  • 相关阅读:
    TCP/IP Checksum 吐槽
    RHEL安装时加载第三方raid驱动
    RHEL Channel Bonding
    关于case语句中声明变量并初始化的注意事项
    Allocators与Criterion的相同点及区别
    BitSet构造函数的两种特例
    Bitset<>用于unordered container时的默认hash函数
    C++ Stream
    C++Exception知识整理
    C++String知识整理
  • 原文地址:https://www.cnblogs.com/httandytt/p/5931964.html
Copyright © 2020-2023  润新知