正则表达式

11 阅读4分钟

什么是正则表达式

正则表达式是用于匹配字符(文本和数字)的规则。

正则表达式是一套“字符模式”的规则。

说白了,正则表达式就是用来描述文本 “长什么样子”

那么正则表达式怎么写呢?

var reg = new RegExp('规则','参数')

这样就创建了一个正则表达式对象,其中第一个参数是你对规则的表述,第二个参数是一些匹配细节,可以不传。

有了规则,就可以测试某个目标是否符合该规则。

reg.test(target) 会返回匹配的结果,truefalse,分别代表匹配通过和匹配不通过。

比如:

var reg = new RegExp('a') 
reg.test('abc') //abc包含a,返回true
reg.test('bbc') //bbc不包含a,返回false

这里就是在匹配‘abc’这个字符串里包不包含‘a’。

可以简化写法,用字面量表达:var reg = /a/

var reg = /a/ //等同于:var reg = new RegExp('a') 
reg.test('abc') //true
reg.test('bbc') //false

正则的匹配默认是区分大小写的,如果想忽略大小写,可以:new RegExp('a',i)。i(ignore)代表忽略大小写。

/a/.test('Abc') //false
/a/i.test('Abc') //true

默认只会匹配到第一个符合规则的,如果想把所有的符合规则的片段都匹配出来,可以:new RegExp('a',g)。g(global)代表全局。

写法

规则

中括号

中括号内表示对单个字符的描述:var reg = new RegExp('[a]')

中括号里可以放多个字符,比如: var reg = new RegExp('[abc]') ,表示可以是a或b或c,注意, 不是匹配‘abc’这个字符串,而是表示a或b或c都可以通过匹配,

var reg = new RegExp('[abc]') 
reg.test('1111a') //true
reg.test('1111b') //true
reg.test('1111c') //true
reg.test('1111d') //false

中括号里随便你写

var reg = new RegExp('[abc1234]') 
var reg = new RegExp('[0123456789]') 

范围

中括号里,可用中划线规定范围:

var reg = new RegExp('[0-9]')  //等同于var reg = new RegExp('[0123456789]') 
var reg = new RegExp('[a-z]')  //等同于var reg = new RegExp('[abc...xyz]') 

//还可以写多个范围复合
var reg = new RegExp('[a-zA-Z]')  //等同于var reg = new RegExp('[abc...xyzABC...XYZ]') 
var reg = new RegExp('[a-zA-Z0-9]')  //等同于var reg = new RegExp('[abc...xyzABC...XYZ0123456789]') 

如果想表示特定范围之外的范围,在中括号之内的开头加上^。

var reg = new RegExp('[^0-9]')  //表示0-9之外的字符
var reg = new RegExp('[^a-z]')  //表示a-z之外的字符
特殊范围符号

有很多特殊范围符号来表示特定的范围。

字符意义例子
.任意字符new RegExp('.')
\d所有数字,等同于[0-9]new RegExp('\d')
\w所有单词字符:数字 + 所有字母 + 下划线_,等同于:[0-9a-zA-Z_]new RegExp('\w')
\W所有非单词字符, 等同于:[^0-9a-zA-Z_]new RegExp('\W')
\s空白字符:空格、回车、换行符、制表符等,new RegExp('\s')
\S非空白字符:数字 + 所有字母 + 下划线_, 等同于:[^\s]new RegExp('\S')
\.\.表示.这个字符,由于.这个字符本身代表所有字符,因此需要用\转义一下new RegExp('\.')
\\\\表示\这个字符,由于\这个字符本身用于转义,因此需要用\转义一下new RegExp('\\')
^以什么什么作为开头new RegExp('^\d')
$以什么什么作为结尾new RegExp('\d$')
// .表示任意字符
var reg = new RegExp('.')  

// \d表示所有数字,等同于[0-9]
var reg = new RegExp('\d')  

// \w表示单词字符:数字 + 所有字母 + 下划线_,等同于:[0-9a-zA-Z_]
var reg = new RegExp('\w')  

// \W表示非单词字符,等同于:[^0-9a-zA-Z_]
var reg = new RegExp('\W') 

// \s表示空白字符:空格、回车、换行符、制表符等,
var reg = new RegExp('\s')  

// \S表示非空白字符, 等同于:[^\s]
var reg = new RegExp('\S') 

// \.表示.这个字符,由于.这个字符本身用于转义,因此需要用\转义一下
var reg = new RegExp('\.') 

// \\表示\这个字符,由于\这个字符本身用于转义,因此需要对自己也用\转义一下
var reg = new RegExp('\\') 

// ^表示以什么什么作为开头
var reg = new RegExp('^\d') //以数字开头 

// $表示以什么什么作为结尾
var reg = new RegExp('\d$')  //以数字结尾
var reg = new RegExp('^\d$') //以数字开头和结尾 

模式重复

如果想表示某个字符模式重复几次,可以在后面加上{重复次数}。

var reg = new RegExp('a{1}')  //表示a重复1次
var reg = new RegExp('[0-9]{3}')  //表示0-9之内的字符重复3次

var reg = new RegExp('a{1,3}')  //表示a重复1~3次
var reg = new RegExp('[0-9]{1,3}')  //表示0-9之内的字符重复1~3次

var reg = new RegExp('a{n,}')  //表示a至少重复n次,n次和n次以上
var reg = new RegExp('[0-9]{n,}')  //表示0-9之内的字符至少重复n次,n次和n次以上

var reg = new RegExp('a+')  //表示a重复1~多次,即1次到多次,等同于{1,}
var reg = new RegExp('[0-9]+')  //表示0-9之内的字符重复1~多次,即1次到多次

var reg = new RegExp('a*')  //表示a重复任意次数,即0次到多次,等同于{0,}
var reg = new RegExp('[0-9]*')  //表示0-9之内的字符重复任意次数,即0次到多次,等同以{1,}

var reg = new RegExp('a?')  //表示a最多重复1次,即0次到1次,等同于{0,1}
var reg = new RegExp('[0-9]?')  //表示0-9之内的字符最多重复1次,即0次到1次,等同以{0,1}
字符意义
{n}重复n次
{n,m}重复n~m次
{n,}重复n次及n次以上
+重复1~多次,即1次到多次,等同于{1, }
{*}重复任意次数,即0次到多次,等同于{0,}
{?}最多重复1次,即0次到1次,等同于{0,1}

练习

  • 写个邮箱的正则表达式

/^w+\.w+@w+$/