正则表达式

一、如何使用正则

(1)exec()方法

// 获取首次匹配结果
var str = 'AbC123abc456';
var reg = /abc/i;
reg.exec(str);//匹配结果:["AbC",index:0,input:"AbC123abc456"]

(2)match()方法

var str = "It's is the shorthand of it is";
var reg1 = /it/gi;
str.match(reg1); // 匹配结果:(2)["It","it"]
var reg2 = /^it/gi;
str.match(reg2); // 匹配结果:["It"] 匹配了第一个it
var reg3 = /s/gi;
str.match(reg3); // 匹配结果:(4)["s","s","s","s"]
var reg4 = /s$/gi;
str.match(reg4); // 匹配结果:["s"] 匹配了最后一个s

二、模式修饰符

修饰符描述
i忽略大小写匹配
g全局匹配
m多行匹配
s特殊字符圆点.中包含换行符\n
u以Unicode编码执行正则表达式
y粘性匹配,仅匹配目标字符串中此正则表达式的lastIndex属性指示的索引

三、字符类别

字符含义
.匹配除“\n"外的任何单个字符
\d匹配任意一个阿拉伯数字(0~9)
\f匹配一个换行符(form-feed)
\D匹配任意一个非阿拉伯数字字符
\s匹配一个空白符,包括空格、制表符、换页符、换行符等
\w匹配任意一个字母(大小写)、数字和下划线
\b匹配单词分界符。如“\log"可以匹配”best grade“,结果为”g"
\t匹配一个水平制表符(tab)
\n匹配一个换行符(linefeed)
\xhh匹配ISO-8859-1值为hh(2个16进制数字)的字符,如“\x61"表示”a"
\S匹配一个非空白符
\W匹配任意一个非“字母(大小写)、数字和下划线”的字符
\B非单词分界符。如“\Bade”可以匹配"best grade",结果为“ade"
\r匹配一个回车符(carriage return)
\v匹配一个垂直制表符(vertical tab)
\uhhhh匹配Unicode值为hhhh(四个16进制数字)的字符,如"\u597d"表示“好”

四、字符集合

pattern说明
[cat]匹配字符集合中的任意一个字符c、a、t
[^cat]匹配除c、a、t以外的字符
[B-Z]匹配字母B~Z范围内的字符
[^a-z]匹配字母a~z范围外的字符
[a-zA-Z0-9]匹配大小写字母和0~9范围内的字符
[\u4e00-\u9fa5]匹配任意一个中文字符

五、限定符

字符说明
?匹配前面的字符零次或一次
+匹配前面的字符一次或多次
*匹配前面的字符零次或多次
{n}匹配前面的字符n次
{n,}匹配前面的字符至少n次
{n,m}匹配前面的字符n~m次

六、贪婪与懒惰匹配

'webWEBWebwEb'
字符意义结果
/w.*b/gi贪婪匹配,尽可能多的匹配‘webWEBWebwEb’
/w.*?b/gi懒惰匹配,尽可能少的匹配‘web’

七、括号运算符

1.作用

(1)改变限定符作用范围

1.改变作用范围前
正则表达式:catch|er
可匹配的结果:catch、er
2.改变作用范围后
正则表达式:cat(ch|er)
可匹配的结果:catch、cater

(2)分组

1.分组前
正则表达式:abc{2}
可匹配的结果:abcc
2.分组后
正则表达式:a(bc){2}
可匹配的结果:abcbc

2.捕获与非捕获

案例判断年份月份

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
    <form action="" id="form">
        年份<input id="year" type="text"><span id="yearmsg"></span><br />
        月份<input id="match" type="text"><span id="matchmsg"></span><br />
        <input type="submit" value="查询">
    </form>
    <script>
        var form = document.querySelector('#form')
        var year = document.querySelector('#year');
        var match = document.querySelector('#match');
        var yearmsg = document.querySelector('#yearmsg');
        var matchmsg = document.querySelector('#matchmsg');
        
        form.onsubmit = function () {
            return checkYear(year) && checkMonth(match);
        };

        function checkYear(obj) {
            if (!obj.value.match(/^\d{4}$/)) {
                obj.style.borderColor = 'red'
                yearmsg.innerHTML = '输入错误,年份应该是4位数字'
                return false;
            }
            yearmsg.innerHTML = '';
            return true;
        };

        function checkMonth(obj) {
            console.log('m');
            if (!obj.value.match(/^((0?[1-9])|(1[012]))$/)) {
                obj.style.borderColor = 'red'
                matchmsg.innerHTML = '输入错误,年份应该是4位数字'
                console.log('m');
                return false;
            }
            matchmsg.innerHTML = '';
            return true;
        };
    </script>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值