正则表达式

近日在学习正则表达式 今天做初步总结 不足之处 欢迎指出

正则的功能:匹配字符串;可结合String函数处理字符串。

常用函数:str.match(Exp)、Exp.text(str),此外还有str.replace(Exp,replaceStr)
区别:语法结构相反;match返回匹配的字符串, text返回布尔值

正则的两种写法:/Exp/、new RegExp("Exp")
区别:/Exp/书写方便,但只能匹配常量,无法解析变量 ;new RegExp("Exp")可解析变量

语法(常用): 标识符:g(全局匹配)、i(不区分大小写)、m(多行匹配),可同时使用,例如:/Exp/gi、new RegExp("Exp","g");

量词:{3,6}表示3-6个,例如/\w{3,6}/表示3-6个字符

等同于{1,}表示至少有一个或者无限多个 等同于{0,}表示0个或多个,可有可无 ?等同于{0,1}表示0个或一个 {3}表示3个 元字符:(大小写匹配正好相反,例如\d匹配数字 \D匹配非数字) . 匹配单个字符 \d 匹配数字 \w 匹配字符 \s 匹配空格 \b 匹配独立部分,例如单词边界 holle worldhello 正则:/\bhello\b/g匹配到第一个

字符集:[a-z] [a-z] 匹配小写字母 [A-Z] 匹配大写字母 [0-9] 匹配数字 [0-9a-zA-Z]三者为逻辑或关系,可匹配小写字母或大写字母或大写数字

开始与结束: ^ 表示开始 $ 表示结束

逻辑:ab(与)、a|b(或)、[^0-9](非) [^0-9] 在字符集中的^表示逻辑非,这里表示非数字
ab 表示逻辑与,例如/ab/匹配连着的ab
a|b 表示逻辑或 ,可以符合a逻辑或者b逻辑,例如/^\d+|^[a-z]+/g匹配整串数字或小写字母

子集:()里面是一个集合
例如:原来/abc+/可以匹配到abcccc,但是/(abc)+/匹配到的是abcabcabc
子集特殊语法:引自(www.cnblogs.com/deerchao/ar…

值得一提的是(?!exp)匹配的是后面跟的不是exp的位置,可用于验证必须同时具有n种类型的字符串 例子中有用到

正则小练习:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">
    <style type="text/css">
        html,body{
            font-family: "微软雅黑";
            font-size:16px;
            line-height: 30px;
        }
        .red{
            color: red;
        }
        .p{
            padding-left:50px;
        }
    </style>
</head>
<body>

</body>
<script type="text/javascript">
    var mailstr="lory_1234gggg56@qq163.com.com";
    var qqstr="57729945024";
    //var phonestr="15635395946";
    var phonestr2="010-3535946";
    var idstr="13050219951128494X";
    var mmstr="Zaaaaaaaaaa1a";
    var or="aaaaaaaaaaaa";
    var cc="alilili"
    var reg=
    {
        mail:/^[0-9a-zA-Z_]+@[0-9a-zA-Z]+(\.[a-z]+){1,2}$/g,//可包含大小写字母,并有@符号,包含.符号
        qq:/^\d{5,12}$/g,//5-12位数字
        phone:/^(0[0-9]{2}[\d-]{1})?\d{7}$|^\d{11}$/g,//规则一:第一位为0,二三位为数字,第四位为数字或-,后跟7位数字;规则2:座机去除前4位(例如010-);规则二:11位数字      
        idcard:/^\d{17}[0-9x]$/gi,//18位数字,最后一位可为X,不区分大小写
        mm:/^(?![0-9a-z]+$)(?![0-9A-Z]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]{6,18}$/g,//匹配非全数字 非全字母 密码必须由大写字母、小写字母、数字组合成,长度为6-18位
        or:/^\d+$|^[a-z]+$/g,
        cc:/a(li)+/g
    }
    var des={
        mail:"邮箱:可包含大小写字母,并有@符号,包含.符号",
        qq:"qq:5-12位数字",
        phone:"电话号码:规则一:第一位为0,二三位为数字,第四位为数字或-,后跟7位数字;规则2:座机去除前4位(例如010-);规则二:11位数字"   ,
        idcard:"身份证号码:18位数字,最后一位可为X,不区分大小写",
        mm:"密码:匹配非全数字 非全字母 密码必须由大写字母、小写字母、数字组合成,长度为6-18位",
        or:"逻辑或测试",
        cc:"子集测试"
    }
    fn.call(mailstr,"mail");
    fn.call(qqstr,"qq");
    //fn.call(phonestr,"phone");
    fn.call(phonestr2,"phone");
    fn.call(idstr,"idcard");
    fn.call(mmstr,"mm");
    fn.call(or,"or");
    fn.call(cc,"cc");
    function fn(c)
    {       
        document.write("正则:<span class='red'>"+reg[c]+"</span><br/><span class='p'>"+des[c]+"</span><span class='p'>匹配字符:"+this.match(reg[c])+"</span><br/>");      
    }

</script>
</html>
复制代码

修改以下正则:

/[EMOT](1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|800|801|802|803|zyg)[\/EMOT]/g
复制代码

需求:匹配[EMOT]1-80数字或800-803数字或zyg[/EMOT]

var reg=/\[EMOT\]([1-7]{1,2}|[1-8]0|78|79|80[0-3]|zyg)\[\/EMOT\]/g;
var str="[EMOT]22[/EMOT][EMOT]78[/EMOT][EMOT]80[/EMOT][EMOT]00[/EMOT][EMOT]10[/EMOT][EMOT]800[/EMOT][EMOT]803[/EMOT][EMOT]804[/EMOT][EMOT]zyg[/EMOT][EMOT]z[/EMOT]";
var reg2=/\[EMOT\](1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|800|801|802|803|zyg)\[\/EMOT\]/g;
console.log(str.match(reg));
console.log(str.match(reg2));
复制代码

//去除html标签

var str="<p>免费、即时的多语种在线翻译</p>↵↵<p>只要您到店,便可以给您一个满意的价格。</p><div>45555555555555</div>"
var reg=/<\/?[a-z]+>/g;
console.log(str.replace(reg,""));
复制代码

正则是单个字符进行匹配的!

路漫漫其修远兮,吾将上下而求索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值