目录
附:文章结尾有系统化正则学习链接
一.了解正则
正则表达式(Regular Expression)是用于匹配字符串中的字符组合的模式,在我们的JS中,正则表达式也是对象,通常被用来检索,比如我们网页中的表单验证,有些网站设置密码只能为英文字母数字以及下划线组成,这时,就用到了正则的匹配功能;比如我们在游戏或者网站的评论区中发一些敏感的词汇,就会被替换为**,这个我们并不陌生,这就是用到了正则的替换功能;再或者在一些网站的搜索框中,我们输入信息之后,会弹出相关的信息链接,这就是用到了正则的提取功能;可见正则的灵活性、逻辑性以及功能性非常的强大,但是现在网络上有很多完整的正则表达式,我们复制粘贴就好,只是需要会修改,可以看懂就好
二.创建正则表达式
在JS中,我们有俩种方法可以创建一个正则表达式
1.通过调用RegExp对象的构造函数来创建:
var 变量名 = new RegExp(/正则表达式/);
2.通过字面量创建
var 变量名 = /正则表达式/;
通过创建正则表达式我们不难看出,正则表达式需要使用/ /符号来包含,这也是固定的语法格式
那么我们会创建正则表达式,怎么使用呢?
我们可以测试当前这个值是否符合程序员创建指定正则表达式的规范,来判断用户提供的这个值是否符合规定:
3.测试正则表达式:
text()
text是正则对象的方法,用于检测字符串是否符合指定的规则,该对象返回的值为true或者是false,()里面的参数是我们要测试的字符串
var regObj = /^[-_a-zA-Z0-9]{6,16}$/;
regObj.text(str);
//regObj是我们程序员定义的字符串规则
//str可以理解为用户输入的值
//我们可以用检测的方法来判断用户输入的值是否符合规则,来做出相应的动作
三.正则中的特殊字符(元字符)
我们通过上面的例子可以看出正则表达式是由很多字符、字母或数字组合起来的一种规则
我们这里就来阐述一下常用的特殊字符:
1.边界符:
正则表达式中的边界符也叫位置符,是用来提示字符所处的位置,那怎么理解这句话呢?
^:表示匹配行首字符
$:表示匹配行尾字符
^也就是说用户输入的值必须以当前这个字符串为开头:
var reg = /^bbq/;
//首先我们创建了一个正则
console.log(reg.test('bqb343'));
//此时假设用户输入bqb343,但是我们要求以bbq开头,所以返回值为false,这时我们就需要做出一些动作来提醒用户什么是正确的
conaole.log(reg.test('bbq454git'));
//true
$表示匹配行尾元素,那如果我们行首行尾都匹配上,什么才是正确的呢?
var reg = /^abc$/;
这时,就必须输入abc完整的字符串才可以,多一个少一个,打乱位置都不行,我们也称为精准匹配,但是这样并不是我们想要的规则,这样会使我们的编写和用户的操作非常的繁琐,所以我们又规定了一个字符的类:
2.字符类:
[ ]:表示只要包含字符串中的其中一个字符就可以了
var reg = /^[bbq]$/;
这样的话,就表示三选一即可,包含其中一个字符就是正确的,好像这样也不是很方便,可以在范围化一些吗?
3.范围符
范围符书写在[ ]内:[ - ]:表示一个值到另一个值期间的全部范围都为true
var reg = /^[a-z]$/;
//26个英文字母任何一个字母都为true,不过这是严格规定区分大小写的
//所以,大写A-Z为false
//我们可以这样写,表示全部英文字母以及其大小写
var reg = /^[a-zA-Z]$/;
tips:^符号在[ ]内外是有区别的,如果写在括号外,表示边界符,但是写在括号内就表示取反的意思
var reg = /^[^a-zA-Z]$/;
//表示出了26个英文大小写字母之外的所有字符都为true
4.量词符
量词符是用来规定某个模式或者字符串出现的次数
*:重复零次或者更多次
+:重复一次或者更多次
?:重复零次或者一次
{n}:重复n次
{n,}:重复n次或者更多次
{n,m}:重复n-m次(常用)
var reg = /^[a-zA-Z0-9_-!]{6,16}$/;
我们来看这样一段代码:表示全部大小写英文字母以及全部数字和-_!这三个字符,后面量词符规定必须最少6位字符,最多16位,这就是我们常用的密码输入规定
tips:除了量词符{ },字符类[ ],还有一种小括号,它表示优先级
三.预定义类
我们的正则预先为我们提供了很多的类,有时可以为我们省下很多的时间,我们举例一些常用预定义类:
\d:匹配0-9之间的任意数字,相当于[0-9]
\D:匹配所有0-9以外的字符,相当于[^0-9]
\w:匹配任意字母,数字和下划线,相当于[ A-Za-z0-9_ ]
\W:表示小写w取反
\s:匹配空格(包括换行符,制表符,空格等等)
\S:小写s取反
var reg = /^[\w]{6,16}$/;
四.正则表达式——替换
这就是开头说的敏感词检测替换,我们可以使用以下方法来进行字符的替换操作:
replace():替换的参数可以是一个字符串或者一个正则表达式
var StringObj = $("#ipt=prow").value
StringObj.replace(regexp/substr,replacement);
//regexp/substr表示要被替换的字符串(敏感词汇)
//replacement表示替换为的字符串
//replace()方法的返回值是一个替换完成的字符串
StringObj.replace(/笨蛋/,'**');
但是这里有一个小问题:这样只能匹配到第一个敏感词汇,如果用户输入了100个笨蛋,那我们只能替换第一个,什么方法可以解决呢?
switch:修饰符(按照指定的模式匹配字符串)
语法:/ 表达式 / [switch] /
g:全局匹配
i:忽略大小写
gi:全局匹配并且忽略大小写
var StringObj = $("#ipt=prow").value
StringObj.replace(/笨蛋/g,'**');
这样我们就可以将全局的指定敏感词汇都替换为**了
想要了解更多正则知识的话,我推荐一个网址给大家: