正则表达式

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。

正则表达式的类型是 object

正则表达式的语法一:var patt=/pattern/modifiers;

正则表达式的语法二:var patt=new RegExp(pattern,modifiers);

modifiers (修改器,修饰符),修饰符(modifiers)描述了检索是否是全局,区分大小写等

修饰符:

i-->是用来执行不区分大小写的匹配

g-->是用来执行全局/全文的搜索(而不是执行找到第一个匹配值就停止,而是全文匹配)

正则表达式方法:

检测一个字符串是否与正则相匹配;

1.reg.test(string) =》返回值为布尔值 true匹配,false不匹配;

2.reg.exec(string)=》匹配成功返回数组,并确定其位置,否则返回null;
 

var str = "A";
 var reg = new RegExp(/[a-z]/, "i");
var res = reg.exec(str);
console.log(res); //-->返回数组Array(1) 0: "A";groups: undefined;index: 0;input: "A";length: 1
 var res = reg.exec("1");
console.log(res); //--->不匹配时,返回null


常用表达式:

[]表示中括号中任意一个匹配就可以;

1.[a-z] 查找任何从小写 a 到小写 z 的字符

var reg = new RegExp(/[a-z]/i);
var reg = new RegExp(/[a-z]/, "i"); //-->两种写法均可
var flag = reg.test(str);
//1.reg.test("字符串"),方法返回布尔值,匹配返回true,否则返回false
console.log(flag);


2.[A-Z] 查找任何从大写 A 到大写 Z 的字符;[/[a-zA-Z]/]匹配26个大小写字母

 //匹配26个字母大小写;
        var reg = /[a-zA-Z]/g;
        var flag = reg.test("aA")
        console.log(flag); //-->true;


3.[0-9] 查找任何从 0 至 9 的数字,只有有一个符合匹配的时候,就返回true

//匹配0-9数字,只有匹配一个,就返回true
 var reg = /[0-9]/;
 console.log(reg.test("a01")); //-->true


4.[abc] 查找括号内的任意一个字符;只要有一个字符匹配返回true;

 //[abc]    查找括号内的任意一个字符
var reg = /[abc]/
console.log(reg.test("a1233"));//--->true


5.[^abc] 查找除了括号内的任意字符;

// /[^abc]/查找除了括号内的任意字符
//除了括号里的字符串,只有存在其他的任何字符都返回true
var reg = /[^abc]/
console.log(reg.test("a")); //--->false
console.log(reg.test("af")); //--->true


常用元字符:

1.\w 匹配数字、包含大小写字母、下划线

2.\W 匹配非数字、字母、下划线(一般用于匹配特殊字符)

3.\d 匹配数字

4.\D 匹配非数字

5.\s 匹配空白字符(空格、换行)换行就会产生空格

6.\S 匹配非空白字符

7.\n 匹配换行符,不匹配空格

8.^是表示开头,只匹配以^号后面的字符开头的字符串,不是以特定开头的字符串不进行匹配

9.$是表示结尾,只匹配以$号前面的字符结尾的字符串,不是以特点字符结尾的字符串不进行匹配

 10.^ 和 $ 两个符号同时使用时,表示 精确匹配,两个条件都有满足,即匹配字符串和匹配模式一样

var str = "123Abc";
var patt1 = /^[0-9]+abc$/i; //i是表示执行时不区分大小写
//^是表示开头,只匹配以^号后面的字符开头的字符串,不是以特定开头的字符串不进行匹配
//$是表示结尾,只匹配以$号前面的字符结尾的字符串,不是以特点字符结尾的字符串不进行匹配
//^ 和 $ 两个符号同时使用时,表示 精确匹配,两个条件都有满足,即匹配字符串和匹配模式一样
console.log(typeof patt1);//-->object
console.log(str.match(patt1));
 
var str2 = "Is this all there is?";
var patt2 = /is/g;

相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

运算符描述
\转义符
(), (?:), (?=), []圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}限定符
^, $, \任何元字符、任何字符定位点和序列(即:位置和顺序)
|替换,"或"操作
字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。
字符描述
\

将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。

^

匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。

$

匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。

*

匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。

+

匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

?

匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等价于 {0,1}。

{n}

n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

{n,}

n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

{n,m}

m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

举例看下

<script>
        /* 验证11位手机号码 第二位一般是34578*/
        var str = "13315562277";
        var reg = /^1[34578][0-9]{9}$/
        // var reg = /^1[34578]\d{9}$/
        console.log(reg.test(str));

        //邮箱验证
        // \. 反斜杠\ 转义符,把.转换成字符串
        // ()小括号分组,就是.com 或者 .cn 当成一组,()+ 表示可能一组也可能多组
        var str = "xiaoming@163.com.cn"
        var reg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
        var reg = /^[\w-]+@[\w-]+(\.[\w-]+)+$/;
        console.log(reg.test(str)); //-->true;

        // .之前不用\来看下情况
        //此时com前面没有 .   依然时会返回true;
        var str2 = "xiaoming@163com";
        var reg = /^[\w-]+@[\w-]+(.[\w-]+)+$/;
        console.log(reg.test(str2)); //-->true;说明对 . 的匹配已经失效;

        // 使用正则给如下字符串中的数字加上中括号
        // var str='abc123efg';  变成'abc[1][2][3]efg'

        var str = 'abc123efg';
        var reg = /\d/g;
        var newStr = str.replace(reg, function (a, b) {
            return "[" + a + "]";
        })
        console.log(newStr);

        var str = 'abc123efg';
        var reg = /\d/;
        var arr = str.split("");
        for (var i = 0; i < arr.length; i++) {
            if (reg.test(arr[i])) {
                arr[i] = "[" + arr[i] + "]";
            }
        }
        str2 = arr.join("");
        console.log(str2);


        var str = 'abc123efg';
        var reg = /\d/;
        var strNew = ""
        for (var i = 0; i < str.length; i++) {
            var chars = str.charAt(i);
            if (reg.test(str[i])) {
                strNew = strNew + ("[" + chars + "]");
            } else {
                strNew = strNew + chars;
            }
        }
        console.log(strNew);
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值