博前“废话”
今天在做用户注册界面时,要求验证用户注册时所填的用户名按照‘由字母、数字或“_”组成,长度不少于6位且不大于30为’的规则填写用户名。第一反应是使用正则表达式,这源于java处理这种情况时使用的方式。那么在JavaScript中是否也能采用这样的措施呢?经过查询后,得知在JavaScript确实可以采用正则表达式,而且使用的规则居然和java中正则表达式惊人的相似,可以说二者使用的正则表达式是一模一样的,下面将对正则表达式进行分析。
什么是正则表达式?
正则表达式,又叫做规则表达式–Regular Expression,在代码中经常被简写为regex、regexp或RE,它是计算机科学中的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
表达式的分类
正则表达式大致分为如下几类:
1. 字符类表达式
2. 预定义字符类表达式
3. 匹配次数的数量词
4. 边界匹配器
在介绍这四种表达式之前,需要对转义字符进行一个简要的说明。
转义字符
表达式 | 表示含义 | 说明 |
---|
\r,\n | 表示回车和换行符 | |
\t | 制表符 | |
\\ | 表示’\’本身 | ‘\’是转义字符的标识 |
\^ | 表示^符号本身 | ^是一个特殊字符 |
\$ | 表示 ‘\$’ 符号本身 | $是一个特殊字符 |
\. | 表示小数点(.)本身 | .是一个特殊字符 |
字符类表达式
表达式 | 表示含义 |
---|
[xy5@] | 表示”x”或”y”或”5”或”@” |
[^xyz] | 表示除去”x”,”y”,”z”的任意一个字符 |
[a-f] | 表示”a”~”f”中的任意一个字符 |
[^a-f0-7] | 表示除了”a”~”f”,”0”~”3”的任意一个字符 |
预定义字符类表达式
表达式 | 表示含义 | 说明 |
---|
\d | 表示0到9中任意一个数字 | |
\w | 表示任意一个字母或数字或下划线,即A-Za-z0-9_任意一个 | |
\s | 表示制表符、换页符、空格等空白字符中的其中任意一个 | |
. | 小数点表示除了换行符(\n)的任意一个字符 | |
匹配次数的数量词
表达式 | 表示含义 |
---|
{n} | 表达式重复n次 |
{m,n} | 表达是至少重复m次,至多重复n次 |
{m,} | 表达式至少重复m次 |
? | 匹配表达式0次或1次 |
* | 表达式出现或者不出现,相当于{0,} |
+ | 表示至少出现1次,相当于{1,} |
边界匹配器
表达式 | 表示含义 |
---|
^ | 表示字符串开头,不匹配任何字符 |
$ | 表示字符串结尾,不匹配任何字符 |
\b | 匹配一个单词边界,即单词与空格之间的位置,不匹配任何字符 |
|左右两边表达式之间“或”关系 | |
附加参数
表达式属性 | 说明 |
---|
i | Ignorecase,忽略表达式中的字母大小写 |
s | singleline,小数点 “.” 匹配除了换行符(/n)以外的字符。配置为 Singleline 可使小数点可匹配包括换行符在内的所有字符 |
m | Multiline,表达式多行匹配 |
g | Global,全局匹配 |
定义正则表达式
介绍了几种正则表达式,那么我们怎样定义一个正则表达式呢?这里有两种方式:普通方式和构造函数方式
方式 | 规则 | 示例 |
---|
普通方式 | var reg = /表达式/附加参数,其中附加参数可加可不加 | var reg = /x*y/; var reg = /wxy+z/g |
构造函数 | var reg = new RegExp(“表达式”,”附加参数”) | var reg=new RegExp(“x*y”);var reg=new RegExp(“wxy+z”,”g”); |
区别:普通方式中的表达式必须是一个常量字符串,而构造函数中的表达式可以是常量字符串,也可以是一个js变量,例如根据用户的输入来作为表达式参数等等:
var reg=new RegExp(document.forms[0].exprfiled.value,”g”);
表达式操作
表达式对象(RegExp)方法
操作 | 含义 |
---|
exec(str) | 返回str中与表达式相匹配的第一个字符串 |
test(str) | 判断字符串str是否匹配表达式,返回一个布尔值 |
String对象方法
操作 | 含义 |
---|
match(expr) | 返回与expr相匹配的一个字符串数组,如果没有加参数g,则返回第一个匹配,加入参数g则返回所有的匹配 |
search(expr) | 返回字符串中与expr相匹配的第一个匹配的index值。 |
replace(expr,str) | 将字符串中匹配expr的部分替换为str |
split(expr) | 将字符串以匹配expr的部分做分割,返回一个数组,而且表达式是否附加参数g都没有关系,结果是一样的。 |