正则语法+JavaScript的正则使用

因为前端学习和工作的时候常用到正则,所以总结了一下正则表达式的基础语法和JavaScript怎么去使用正则

一、作用

正则的作用

1)对表单域项目(用户名、密码、邮箱、qq号码、手机等等)进行验证

2)网络爬虫(一个网站到另一个网站的页面上去获取对方的相关信息)

3)内容替换、获取

最最最常用:表单验证(js最初的作用就是表单验证)

 

应用场景:

手机号替换:替换前:12345678910 替换后 123****8910

敏感词替换:

原字符串:发达国家中国在钓鱼岛进行军事演习

替换后:   发达国家**在***进行军事演习

 

二、正则表达式语法

正则字符类

元字符说明
[a-z]匹配a-z任意一个字符
[A-Z]匹配A-Z任意一个字符
[a-zA-Z]匹配26个英文字母(大小写)
[0-9]匹配一个数字
[0-9a-zA-Z_]匹配一个字符可以是数字和字母
[^0-9]匹配非数字
[^a-zA-Z]匹配非字母

多学一招: 如果需要取反在第一个“[”后面添加“^”符号即可

 

常用字符类

元字符说明
\d匹配数字,相当于:[0-9]
\D匹配非数字,相当于:[^0-9]
\w匹配数字、字母、下划线,相当于:[0-9a-zA-Z_]
\W匹配非数字、字母、下划线,相当于:[^0-9a-zA-Z_]
\s匹配空白字符串(空格)
\S匹配非空白字符串
.匹配所有字符

 

重复字符

元字符说明
*指重复0到多次
+指重复1到多次,至少出现一次 , 如:/a+/
指重复0到1次,最多一次
{n}指匹配n次 , 如:{8} 匹配8次 /a{8}/
{n, m}指匹配n到m次,如:{1,8} 匹配1~8次 /a{1,8}/
{n, }指匹配至少n次,如:{1,} 匹配至少1次 /a{1,}/

 

常用定位符

元字符说明
^限定行首数据
$限定行尾数据

 

正则表达式修饰符

元字符说明
i执行对大小写不敏感的匹配
g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
m执行多行匹配

 

三、JavaScript正则的创建

字面量创建

语法:var regexp = /正则表达式/修饰符;

注意: //不需要加引号

例: var reg = /hello/;

 

直接实例化

语法:var regexp = new RegExp(“正则表达式”,修饰符);

例:var reg = new RegExp('hello')

以对象的方式创建:需要加单双引号,但是不要加/ /

 

那么问题来了:

/一二三四五/   是不是正则表达式?

我的答案是正则

原因:只要写在 '/' 和 '/' 之间的内容就是正则表达式

 

RegExp对象方法(直接使用正则调用)

test()方法

  判断正则表达式是否匹配成功

  成功返回true,失败返回false

例: 下述古诗中是否含有“乘风破浪”?

<script>
    var str = '乘风破浪会有时 直挂云帆济沧海';
    var obj = /乘风破浪/;
    var ret = obj.test(str);
    document.write(ret);    //true
</script>

exec方法

  匹配符合正则表达式条件的数据

  成功返回数组,失败返回null

例:匹配如下字符串中的js?

<script>
    var str = 'js乘风破浪js会有时,js直挂云帆济js沧海';
    var obj = /js/;
    var row = obj.exec(str)
    document.write(row);   //只输出一个js
</script>

匹配全部:

<script>
    var str = 'js乘风破浪js会有时,js直挂云帆济js沧海';
    var obj = /js/g;
    var row;
    while (row = obj.exec(str)){
        document.write(row); //输出全部的js
    }
</script>

留心:需要增加修饰符g表示全局匹配,否则出现死循环

 

正则的字符串调用函数

在 JavaScript 中,正则表达式最常用于用于的几个字符串方法 : search()、match() 和 replace()。

search() 方法

语法:字符串对象.search(待查找的字符串|正则表达式)

作用:用于搜索字符串中指定的元素

返回:返回符合条件的第一个元素下标,没找到返回-1

例:使用正则搜索字符串中"乘风"

<script>
    var str = 'js乘风破浪js会有时,js直挂云帆济js沧海';
    var res = str.search(/乘风/);
    document.write(res);    //输出2(位置)
</script>

 

match()方法

语法:字符串对象.match(待匹配的字符串|正则表达式)

作用:匹配符合条件的内容

返回:返回一个数组

例1: 在字符串中查找 "js":

<script>
    var str = 'js乘风破浪js会有时,js直挂云帆济js沧海';
    var res = str.match(/js/g);
    document.write(res); //输出js,js,js,js
</script>

 

replace() 方法

语法:字符串对象.replace(待匹配的字符串|正则表达式,替换的内容)

作用:用于替换字符串中的数据

返回:返回新的字符串(替换后的字符串)

例:将表单输入字符串中的敏感字符'小日本',有则替换成**

<body>
    <input type="text" placeholder="请输入文字" id="txt" value="" /><br />
    <input type="button" value="检测" id="btn" /><br />
    ​

</body>

<script>
    var chk = document.getElementById('btn');
    chk.onclick = function () {
        var txt = document.getElementById('txt').value;
        
        var reg = /小日本/g;    // 加g替换所有的敏感词
        console.log(txt.replace(reg, '**'));
    }
</script>

 

四、常用检测方式

1.中文检测

    unicode编码中文监测:/^[\u2E80-\u9FFF]+$/

2.用户名检测

    正则:/^[a-z0-9_-]{3,16}$/

3.邮箱检测

    /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/

    可以多次出现 (字母数字下划线.-)@可以出现多个(数字字母.-).2到6位字母或.

    /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/

    可以有多个(字母数字)可有多个可无(.多个(字母数字))@可以多个(数字字母可   有1次可无(-数字字母))可以有多个(1或2个.多个字母)

4.URL检测

    /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w\.-]*)*\/?$/

5.HTML标签检测

    /^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/

<多个(字母)可多个或0个(除了<的所有字符)  />

<多个(字母)可多个或0个(除了<的所有字符)>多个任意字符   </重复第一部分的多个字母>

6.自定义的html标签

/<[^<>]+>/g

 

总结:

       前端往往有大量的表单数据校验工作,采用正则表达式会使得数据校验的工作量大大减轻。常用效果:邮箱,手机号,身份证号等(使用熟练的情况下)。

      任何程序都可以不用正则表达式写出来,但根据懒人原则,怎么做不言而喻。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值