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

    一、表达式属性

    1、g : global,全局匹配
    2、i : ignore,忽略大小写
    3、m : 执行多行匹配

    二、常用表达式(用"..."表示表达式内容)

    1、字符类

    (1)[...]方括号内的任意字符
    例子:
    1)[abc],匹配a,或b或c;
    2)[0-9],方括号内的任意一个数字;
    3)[a-zA-Z],方括号内的任意一个字母;
    4)[u4E00-u9FA5],方括号内的任意一个汉字;

    (2)[^...]不在方括号内的任意字符
    (3). 除换行符( )或终止符( )之外的任意字符
    (4)w 任何ASCII字符组成的单词 等价于[0-9a-zA-Z_]
    (5)W 任何不是ASCII字符组成的单词 等价于[^0-9a-zA-Z_]
    (6)d 任何ASCII数字,等价于[0-9]
    (7)D 任何不是ASCII数字,等价于[^0-9]
    (8)s 任何Unicode空白符
    (9)S 任何非Unicode空白符
    /^S+$/,必须有内容,不能空,且至少一个以上

    2、重复(量词)

    (1){n,m} 匹配前一项至少n次,但不能超过m次
    (2){n,} 匹配前一项至少n次或者更多
    (3){n} 匹配前一项n次
    (4)? 匹配前一项0次或者1次,等价于{0,1}
    (5)+ 匹配前一项1次或者多次,等价于{1,}
    (6
    说明:以上(1)-(6)匹配规则是尽可能多地匹配,属于贪婪匹配;
    在该匹配字符后紧加一个问号,可以改变规则为尽可能少地匹配。
    1)贪婪匹配:
    var regexp = /d{2,4}/g;
    var str = "abc88888888";
    str.match(regexp); //结果:["8888", "8888"]
    2)非贪婪匹配:
    var regexp = /d{2,4}?/g;
    var str = "abc88888888";
    str.match(regexp); //结果:["88", "88", "88", "88"]

    3、分组(按左则括号顺序分组)
    (1) (...) 分组,将若干项组合成一个单元
    例子:
    1)/^([a-zA-Z_]+)([0-9a-zA-Z_]+)$/,匹配数字、字母、下划线,但不能以数字开头;
    2)IP
    var regexp = /(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})/;
    var str = "192.198.255.110";
    str.match(regexp); //结果:["192.198.255.110", "192", "198", "255", "110"]
    3)身份证
    var input = "441622201006067878";
    var regx = /^(d{6})(d{8})(d{4})$/;
    4)email
    var input = "gdyycn@google.com.cn";
    var regx = /^([(w)|.]+)@([0-9a-zA-Z_-]+.[a-zA-Z.-]+)$/;
    5)url
    var input = "http://baidu.com/a/b/1213.png";
    var regx = /^(http[s]?)://([0-9a-zA-Z_-]+.[a-zA-Z.-]+)/(.+)$/

    (2) (?:exp) 仅进行分组,但不记录该分组的内容。
    例子:
    var regexp = /(?:ip:)(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})/;
    var str = "ip:192.198.255.110";
    str.match(regexp); //结果:["192.198.255:110", "192", "198", "255", "110"]

    (3) ...(?=exp),零宽度正预测先行断言,断言"..."出现的位置的后面能匹配表达式exp,就是目标内容后面要出现什么样的内容,这个"什么样"由exp指定。
    例子:
    //提取价格前面的内容
    var input = "aa:12price:1.28price:28aa11bb22价格:87";
    var regx = /(price:|价格:)(?=[d.]+)/g;
    console.log(input.match(regx)); //结果:["price:", "price:", "价格:"]

    (4) (?<=exp)...,零宽度正回顾后发断言,断言"..."出现的位置的前面能匹配表达式exp,就是目标内容前面要出现什么样的内容,这个"什么样"由exp指定。
    例子1:
    //提取价格
    var input = "aa:12price:1.28price:28aa11bb22价格:87";
    var regx = /(?<=price:|价格:)([d.]+)/g;
    console.log(input.match(regx)); //结果:["1.28", "28", "87"]

    例子2:
    //提取div标签内的内容
    var input = "<div>div1</div><div>div2</div>";
    var regx = /(?<=<div>)(w+)(?=</div>)/g;
    console.log(input.match(regx)); //结果:["div1", "div2"]

    (5) | 选择(或者)
    例子:
    var regexp = /^((d{3,4}-)|(d{3,4}))d{8}$/g;
    var str = "021-87668778";//(021)87668778;021-87668778
    str.match(regexp); //结果: 021-87668778 

    3、位置(锚字符)

    (1)^ 匹配字符串的开头
    (2)$ 匹配字符串的结尾
    (3) 匹配单词的边界
    var regexp = /Bj/g;
    var str = "java javascript log4j";
    str.match(regexp); //结果:["j", "j"],即java的j和javascript的j
    (4)B 匹配非单词的边界

    三、String对正则表达式的支持:

    格式:字符串.search/match/replace/split(RegExp)

    1、search()

    (1)格式
    字符串.search(正则表达式)
    (2)结果
    如果匹配,返回匹配的位置(第一个匹配的位置),否则反回-1;
    (3)示例
    var regExp1 = /script/; //或new RegExp(/script/)
    var result = "javascript".search(regExp); //结果为4
    result = "JavaScript".search(regExp); //结果为-1
    result = "java".search(regExp); //结果为-1

    regExp = "script"; //search方法参数可以不遵循正则表达式的格式,直接用字符串(JS引擎会自动根据该字符串创建RegExp对象)
    result = "javascript".search(regExp); //结果为4

    regExp = /script/i; //i,忽略大小写
    result = "JavaScript".search(regExp); //结果为4

    2、match()

    (1)格式
    字符串.match(正则表达式)
    (2)结果
    如果匹配,返回由匹配的子串组成的数组,否则返回null;
    (3)示例
    var regexp = new RegExp(/[0-9]/);
    var result = '1 plus 2 equals 3'.match(regexp); //只匹配第一个,结果为:["1", index: 0, input: "1 plus 2 equals 3"],result[0]就是匹配的值"1"

    regexp = new RegExp(/[0-9]/g); //g,全局匹配
    result = '1 plus 2 equals 3'.match(regexp); //结果为:["1", "2", "3"]
    result = '一加二等于三'.match(regexp); //结果为:null

    3、replace()

    (1)格式
    字符串.replace(正则表达式,新值)
    (2)结果
    返回替换后的值;
    (3)示例
    var regexp = /j/g; //表示字符边界,这里意思是以j开头的字符
    result = "java; javascript;log4j".replace(regexp,'J'); //将以j开头的单词的j替换为J,结果:Java; Javascript;log4j

    regexp = /(([0-9]+))/g; //全局查找"(数字)"内容
    result = "(1)java; (2)javascript".replace(regexp,'[$1]'); //将(数字)替换成[数字],$1指regexp中第一个分组括号中的内容

    4、split()

    var regexp = /#/;
    var str = "abc#efg#xyz";
    str.split(regexp); //结果:["abc", "efg", "xyz"]

    四、RegExp对象

    格式:
    var regexp = new RegExp(正在表达式字符串,属性);//注意转义符
    //var regexp = /正在表达式/;
    regexp.exec/test(字符串)

    (1)exec方法
    如果匹配,返回第一次匹配的结果;否则,返回null
    (2)test方法
    如果匹配,返回true;否则,返回false

    例1:
    //var regexp = /d{2,4}?/g;
    var regexp = new RegExp("\d{2,4}?","g");
    var str = "abcd8888";

    regexp.exec(str); //结果://结果:["88", index: 4, input: "abcd8888"]
    regexp.test(str); //结果:true

    例2(分组,返回所有匹配的分组,可以通过RegExp.$n获取第n组结果(n为分组序号)):
    var regexp = /(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})/;
    var str = "192.198.255.110";
    console.log(regexp.exec(str)); //结果:["192.198.255.110", "192", "198", "255", "110", index: 0, input: "192.198.255.110"]
    console.log(RegExp.$4); //返回第4组匹配结果

  • 相关阅读:
    人心散了、项目必然要败(转自CSDN)
    sql server加锁机制
    数据库事物隔离级别
    aop学习
    数据库加锁(转)
    托管代码和非托管代码效率的对比。
    day05 Linux文本处理命令
    day04 CentOS 异常,问题解决方法
    day02 Linux系统介绍与安装
    linux常用命令的英文单词缩写
  • 原文地址:https://www.cnblogs.com/mgblog/p/11590483.html
Copyright © 2011-2022 走看看