JS中正则表达式简单介绍

一、正则表达式的创建及修饰符

        1.字面量声明

       在一对反斜线中写正则表达式内容,如/abc/  ;正则表达式里面不需要加引号 不管是数字型还是字符串型

var reg =  /正则表达式/修饰符;
var reg = /abc/;

        2.构造函数

构造正则表达式的实例,new RexExp("正则表达式",“修饰符”);

var reg =new RegExp("正则表达式","修饰符");
var reg = new RegExp("abc","g");

        3.修饰符

                g:(global)表示全局匹配

                i: (ignoreCase )表示不区分大小写

                m: (multiline )表示开启多行匹配

        对于一个正则表达式是不是开启了这些修饰符可以通过global、ignoreCase、multiline,这些正则表达式属性来查看。

var reg = /abc/gim;
console.log(reg.global); //true 查看是否开启全局匹配
console.log(reg.ignoreCase);//true  查看是否开启忽略大小写
console.log(reg.multiline);//true  查看是否开启多行匹配

           y模式

y 模式表示匹配到不符合的就停掉,不会继续往后匹配,必须连续的符合条件的。

var name = "xxxxxx,1111111232111,22224542325488,641131234d16544aaasssssaaa";
// 查到数字,逗号有或没有
// y 模式找到后就不会继续往后找
var reg = /(\d+),?/y;
reg.lastIndex = 7;
var qqList = [];
while ((res = reg.exec(name))) {
  console.log(res);
  qqList.push(res[1]);
}
console.log(qqList); // [ '1111111232111', '22224542325488', '641131234' ]

更加详细的y模式可以去到JavaScript:正则表达式的/y标识 - 紫云飞 - 博客园 (cnblogs.com)

二、 正则表达式的实例方法

        1.exec

              作用:  用来匹配字符串中符合正则表达式的字符串。

              返回值:  成功返回一个数组,[匹配成功内容,匹配内容的起始下标,参数字符串,

groups: undefined ];失败返回 null;


var str = "Hello World Hello";
var reg = /Hello/;
var reg1 = /exe/;
var reg2 = /Hello/g;
// lastIndex 就是每次正则表达式查找的起点就是lastIndex
/* 当正则表达式置了全局匹配时,每执行一次exec/test来匹配,lastIndex就会移向匹配到的字符串的下一个位置,
当指向的位置后没有可以再次匹配的字符串时,下一次执行exec返回null,
test执行返回false,然后lastIndex归零,从字符串的开头重新匹配一轮 */
console.log(reg.exec(str), reg.lastIndex); //[ 'Hello', index: 0, input: 'Hello World Hello', groups: undefined ]  0
console.log(reg.exec(str), reg.lastIndex); //[ 'Hello', index: 0, input: 'Hello World Hello', groups: undefined ]  0
console.log(reg1.exec(str), reg1.lastIndex); //null  0
console.log(reg2.exec(str), reg2.lastIndex); //[ 'Hello', index: 0, input: 'Hello World Hello', groups: undefined ]  5
console.log(reg2.exec(str), reg2.lastIndex); //[ 'Hello', index: 12, input: 'Hello World Hello', groups: undefined ] 17

    2.text 

          作用 :判断字符串是否有符合正则表达式的字符串。

         返回值: 成功返回ture 失败返回false

var str = "Hello World Hello";
var reg = /Hello/;
var reg1 = /exe/;
var reg2 = /Hello/g;
// lastIndex 就是每次正则表达式查找的起点就是lastIndex
/* 当正则表达式置了全局匹配时,每执行一次exec/test来匹配,lastIndex就会移向匹配到的字符串的下一个位置,
当指向的位置后没有可以再次匹配的字符串时,下一次执行exec返回null,
test执行返回false,然后lastIndex归零,从字符串的开头重新匹配一轮 */
console.log(reg.test(str), reg.lastIndex); //true 0
console.log(reg.test(str), reg.lastIndex); //true 0
console.log(reg1.test(str), reg1.lastIndex); //false 0
console.log(reg2.test(str), reg2.lastIndex); //true 5
console.log(reg2.test(str), reg2.lastIndex); //true 17

    注意: 当正则表达式置了全局匹配时,每执行一次exec/test来匹配,lastIndex就会移向匹配到的字符串的下一个位置,当指向的位置后没有可以再次匹配的字符串时,下一次执行exec返回null,test执行返回false,然后lastIndex归零,从字符串的开头重新匹配一轮。没有设置全局匹配时,每一次匹配都从字符串的下标为0开始。

三、元字符和数量词和特殊字符

        1.元字符和字符边界

                

^匹配输入开始。表示匹配行首的文本(以谁开始)/^写在[]里面是补充字符集
$匹配输入结尾。表示匹配行尾的文本(以谁结束)
[]

方括号用于查找某个范围内的字符

字母和数字字符 自身
.(英文的 点)匹配除换行符\n和回车符之外的任何单个字符,等效于[^\n\r]
\d0-9的数字
\D除0-9的数字
\w0-9、a-z、A-Z、_ (下划线)
\W除0-9、a-z、A-Z、_ (下划线)外的其他字符
\s匹配任何Unicode空白字符,包括空格、制表符、换页符等,等效 于[\f\t\n\r]
\S[^\f\t\n\r]
\oNull字符
\t制表符
\n换行符
\v垂直制表符
\f换页符
\r回车符

               字符集合[]

                一个字符集合,也叫字符组。匹配集合中的任意一个字符。你可以使用连字符‘-’指定一个范围.在 字符集合[]中特殊的字符不会被当做特殊含义的字符,只会当做本身来进行匹配。列如().?|*+等等没有被\转义字符修饰的都会被当做本身意义去解释(^开始符除外)。


var str = "abc qwe abd";
var reg1 = /[abc]/; // 只要包含有a 或者 包含有b 或者包含有c 都返回为true
console.log(reg1.exec(str)); //[ 'a', index: 0, input: 'abc qwe abd', groups: undefined ]
var str = "abc qwe abd1";
var reg1 = /[0-9]/gim;
console.log(reg1.exec(str)); //[ '1', index: 11, input: 'abc qwe abd1', groups: undefined ]

var str = "abc qwe abd1,2";
var reg1 = /[^abc ]/gim; //除了abc 以外的字符
console.log(reg1.exec(str)); //[ 'q', index: 4, input: 'abc qwe abd1,2', groups: undefined ]

var str = "abc qwe abd1,2";
console.log(str); //abc qwe abd1,2
var reg1 = /[\d]/gim;
console.log(reg1.exec(str)); //[ '1', index: 11, input: 'abc qwe abd1,2', groups: undefined ]
/* 特殊点*/
var reg2 = /[().*|+?]/g;
var str = "().*+ad|f?d";
var arr = reg2.exec(str);
while (arr !== null) {
  console.log(arr);
  arr = reg2.exec(str);
}
/* [ '(', index: 0, input: '().*+adf?d', groups: undefined ]
[ ')', index: 1, input: '().*+adf?d', groups: undefined ]
[ '.', index: 2, input: '().*+adf?d', groups: undefined ]
[ '*', index: 3, input: '().*+adf?d', groups: undefined ]
[ '+', index: 4, input: '().*+adf?d', groups: undefined ]
[ '|', index: 7, input: '().*+ad|f?d', groups: undefined ]        
[ '?', index: 9, input: '().*+ad|f?d', groups: undefined ]    */

            ​分组()和 选择符使用:或者( | ) 

   一般来说分组和选择符一起使用,对于多个匹配的字符串进行匹配。


var reg = /(123|456)/;
var title = "1234688";
var title1 = "23456788";
console.log(reg.test(title)); // true
console.log(reg.exec(title)); //[ '123', '123', index: 0, input: '1234688', groups: undefined ]
console.log(reg.exec(title1));//[ '456', '456', index: 2, input: '23456788', groups: undefined ] 

            开始符(^)和结算符($)

^ 匹配输入开始。表示匹配行首的文本(以谁开始)。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符后的开始处。 在[]字符集合中被当做取反操作。

$ 匹配输入结尾。表示匹配行尾的文本(以谁结束)。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符的前的结尾处。

           

// ^的使用
var reg = /^123/g;
var str = "1232424";
var str1 = "232435";
console.log(reg.test(str)); //true
console.log(reg.test(str1)); //false
// $的使用
var reg = /567$/g;
var str = "1asfffdfdfdaw24224567";
var str1 = "232435sfdsfd667";
console.log(reg.test(str)); //true
console.log(reg.test(str1)); //false
// ^$的一起使用
var reg = /^1234567$/g;
var str = "1234567";
var str1 = "123456";
console.log(reg.test(str)); //true
console.log(reg.test(str1)); //false

2.数量词

        

字符含义
*>=0次
+≥1 次
0或1次
{n}n 次
{n,}≥n 次
{n,m}n到m 次
// 数量符
// * 允许出现0次或多次等价于{0,}
var reg = /^a*$/;
console.log(reg.test("aaaa")); // true
console.log(reg.test("a")); // true
console.log(reg.test("")); // true

//  + 允许出现1次或多次
var reg = /^a+$/;
console.log(reg.test("aaaa")); // true
console.log(reg.test("aaa")); // true
console.log(reg.test("")); // false

//  ? 允许出现1次或0次
var reg = /^a?$/;
console.log(reg.test("aaaa")); // false
console.log(reg.test("aa")); // false
console.log(reg.test("a")); // true
console.log(reg.test("")); // true

// {n}  允许重复n次
var reg = /^a{4}$/;
console.log(reg.test("aaaa")); // true
console.log(reg.test("aaaaa")); // false
console.log(reg.test("a")); // false
console.log(reg.test("")); // false
// {n,}  最少重复n次
var reg = /^a{4,}$/;
console.log(reg.test("aaaa")); // true
console.log(reg.test("aaaaa")); // true
console.log(reg.test("a")); // false
console.log(reg.test("")); // false
// {n,m} 允许重复出现n次-m次之间,也就是>=n且<=m
var reg = /^a{4,6}$/;
console.log(reg.test("aaaa")); // true
console.log(reg.test("aaaaa")); // true
console.log(reg.test("a")); // false
console.log(reg.test("aaaaaaaa")); // false

四、综合使用

// 验证字符串的组成规则,第一个须为数字,后面可以是字母、数字、下划线,总长度为5-20位
var reg = /^[\d][\w]{4-19}$/;

验证QQ号 

// 不能以数字0开始,只能由数字组成,长度为5-11位
var reg = /^[1-9]\d{4,10}$/;
var str1 = "12311111111";
var result1 = reg.exec(str1);console.log(result1);

验证手机号

var reg = /^1[34578]\d{9}$/;
console.log(reg.test("18888888888"));//true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值