javascript学习笔记:正则表达式

假设用户在HTML表单中填写姓名,出生日期,邮箱等,那么在将表单提交到服

器进一步处理前,javascript程序会检查表单来确认用户是否输入了信息,并且

这些息是否符合规定的格式


1.什么是正则表达式?

正则表达式(regular expression)是一个描述字符模式的对象。ECMAScript 的 RegExp 类表示正则表达式,

而 String 和 RegExp 都定义了函数用来使用正则表达式,并以此进行强大的模式匹配和文本检索与替换。


2.正则表达式有什么用?


当用户输入数据并单击按钮以后,要返回到服务器端进行一系列的验证,确认数据的输入格式是否

正确,然后再进行其他方面的验证!服务器要做的很多,如果我们每个数据都要这样放到服务器端

进行基础格式的验证,是非常大材小用并且耗费资源的,所以JS就引进了正则表达式来把一些关于

数据的基础性的验证(比如格式是否正确,是否是数字等)放在客户端,这样就大大减少了服务器

的负担,并且也增强了用户体验!

————————————————————————————————————————————


1.创建正则表达式。

//传统创建正则表达式
var pattern = new RegExp('box','gi');


//字面量创建正则表达式
var pattern = /box/gi;
 

模式参数

g全局匹配
i忽略大小写
m多行匹配



RegExp对象提供两个测试方法:


 方法一:test()

在字符串中查找是否存在指定的正则表达式,返回值为布尔值,如果匹配到了就返回True,如果不存在

就返回False。


 方法二:exec()

如果执行成功,就返回包含该查找字符串的相关信息数组。如果失败返回NULL。



var pattern = /box/ig;
var str = 'BOXdasdasbox';
alert(pattern.test(str));             //打印出 true 
var pattern = /box/i;		       //没有全局匹配

var str = 'BOXdasdasbox';
alert(pattern.exec(str));             //打印出 BOX
alert(pattern.exec(str));             //打印出 BOX
var pattern = /box/ig;		       //开启全局匹配

var str = 'BOXdasdasbox';
alert(pattern.exec(str));             //打印出 BOX
alert(pattern.exec(str));             //打印出 box





String对象定义了四个正则表达式方法:




//string.match(pattern)
var pattern = /box/i;                 //没有开启全局匹配
var str = 'box nsadasdnBox BOX';
alert(str.match(pattern));            //打印出box

var pattern = /box/gi;                //开启全局匹配
var str = 'box nsadasdnBox BOX';
alert(str.match(pattern));            //打印出box Box BOX
//string.search(pattern)
var pattern = /box/i;                 //没有开启全局匹配
var str = 'xox nsadasdnBox BOX';
alert(str.search(pattern));            //打印出12

var pattern = /box/gi;                //开启全局匹配
var str = 'xox nsadasdnBox BOX';
alert(str.search(pattern));            //打印出12
alert(str.search(pattern));            //打印出12

//综上所述,string.search(pattern)只返回第一个匹配的字符串的位置,
//有开启全局匹配,结果也是返回第一个匹配的字符串的位置
//string.replace(pattern,replacement)
var pattern = /box/ig;                //开启全局匹配,才可以全部替换
var str = 'BOX box';  
alert(str.replace(pattern,'xox'));    //打印xox xox

//string.split(pattern)
var pattern = /\s/;                       //以 空格 来才分成数组
var str = 'this is my car!this is my apple!';
alert(str.split(pattern));               //打印出this,is,my,car!this,is,my,apple!



1.正则中的 开始和结束限制符号

1. ^表示匹配字符串的开始,$表示匹配字符串的结束
[javascript]  view plain  copy
  1. var reg = /^this/; //只能匹配开始位置为this 的字符串。  
  2. var str = 'this is a test!';  
  3. var str1 = ' this is a test!';  
  4. console.log(reg.test(str));//true  
  5. console.log(reg.test(str1));//false  
  6. var reg = /this$/;//只能匹配结束位置为this的字符串。  
  7. var str3 = 'this is a test';//false  
  8. var str4 = 'this is a test this';//true  


 
 2.  ^和$ 
 同时出现在匹配模式的开始和结束位置时,只匹配他们之间的部分 
[javascript]  view plain  copy
  1. var reg = /^this$/;//这个值能匹配 this 字符串  其他都不匹配!  
  2. var str1 = 'this is a test';  
  3. var str2 = 'this';  
  4. console.log(reg.test(str1));//false  
  5. console.log(reg.test(str2));//true  
  6. reg =/this/;//这种情况 只要字符串中有this 就匹配成功  
  7. str1 = 'this is a test';//true  
  8. str2 = 'is a test';//false  
  9. console.log(reg.test(str1));//true  
  10. console.log(reg.test(str2));//false  
 
  
 ^不在开始位置而是在[]时意思是取反的意思 也就是不包含的意思,至于[]的讲解在后面会详细提到 
[javascript]  view plain  copy
  1. var reg = /hello,[^w]/;  
  2. var str = 'hello,world';  
  3. console.log(reg.test(str));//false  
  4. var str1 ='hello,better';  
  5. console.log(reg.test(str1));//true  

2.元字符(这里详细的可以参考w3c中对每个元字符详细的描述)点击这里查看详情


     

元字符/元符号

匹配情况

.

匹配除换行符外的任意字符

[a-z0-9]

匹配括号中的字符集中的任意字符

[^a-z0-9]

匹配任意不在括号中的字符集中的字符

\d

匹配数字

\D

匹配非数字,同[^0-9]相同

\w

匹配字母和数字及_

\W

匹配非字母和数字及_




元字符/元符号

匹配情况

\0

匹配 null 字符

\b

匹配空格字符

\f

匹配进纸字符

\n

匹配换行符

\r

匹配回车字符

\t

匹配制表符

\s

匹配空白字符、空格、制表符和换行符

\S

匹配非空白字符


元字符/元符号

匹配情况

^

行首匹配

$

行尾匹配

\A

只有匹配字符串开始处

\b

匹配单词边界,词在[]内时无效

\B

匹配非单词边界

\G

匹配当前搜索的开始位置

\Z

匹配字符串结束处或行尾

\z

只匹配字符串结束处


元字符/元符号

匹配情况

x?

匹配 0 个或 1 个 x

x*

匹配 0 个或任意多个 x

x+

匹配至少一个 x

(xyz)+

匹配至少一个(xyz)

x{m,n}

匹配最少 m 个、最多 n 个 x


元字符/元符号

匹配情况

this|where|logo

匹配 this 或 where 或 logo 中任意一字符类

(string)

用于反向引用的分组

\1 或$1

匹配第一个分组中的内容

\2 或$2

匹配第二个分组中的内容

\3 或$3

匹配第三个分组中的内容



注意: 这里不单单这些特殊符号表示的是元字符,单个的字母 数字 下划线等也是一个元字符

3.修饰符(这里按照我的理解称之为修饰符,意思就是对元字符起到修饰的作用)

常用修饰符包括 * + ? {n,m} {n}等 下面 一一进行详细说明
 注意: 修饰符不能单独使用,要不然会出错,必须和元字符配合使用,也就是起到修饰的作用 ,如果把元字符比作 汉子中的名词,那么修饰符就相当于形容词,没有名词,形容词也就无用武之地了。
 
修饰符前面元字符出现的次数
 *0次或更多次
 +至少1次
 ?0次或者1次
{n,m}最少n次,最大m次(n<=m)
{n}n次

这样一来  * + ?  都可以用{n,m}的形式来表示了
*  等价于 {0,}
+ 等价于 {1,}
?等价于 {0,1}
*示例
[javascript]  view plain  copy
  1. var reg = /hello,w*d/;//w出现个数可以为0个可以为多个  
  2. var str = 'hello,mm';  
  3. var str1 = 'hello,d';  
  4. var str2 = 'hello,wd';  
  5. var str3 = 'hello,wwwwwd';  
  6. console.log(reg.test(str));//false  
  7. console.log(reg.test(str1));//true  
  8. console.log(reg.test(str2));//true  
  9. console.log(reg.test(str3));//true  
+示例
[javascript]  view plain  copy
  1. var reg = /hello,w+d/;  
  2. var str = 'hello,mm';  
  3. var str1 = 'hello,d';  
  4. var str2 = 'hello,wd';  
  5. var str3 = 'hello,wwwwwd';  
  6. console.log(reg.test(str));//false  
  7. console.log(reg.test(str1));//false  
  8. console.log(reg.test(str2));//true  
  9. console.log(reg.test(str3));//true  
?示例
[javascript]  view plain  copy
  1. var reg = /hello,w?d/;  
  2. var str = 'hello,mm';  
  3. var str1 = 'hello,d';  
  4. var str2 = 'hello,wd';  
  5. var str3 = 'hello,wwwwwd';  
  6. console.log(reg.test(str));//false  
  7. console.log(reg.test(str1));//true  
  8. console.log(reg.test(str2));//true  
  9. console.log(reg.test(str3));//false  
{n,m}示例
[javascript]  view plain  copy
  1. var reg = /hello{2,5}d/; //匹配hello,o 出现的次数最少为2次,最多为5次  后面紧跟一个d  
  2. var str = 'sljfhellodsdf';  
  3. var str1 = 'sljfhelloodsdf'  
  4. var str2 = 'sljfhellooodsdf'  
  5. var str3 = 'sljfhelloooodsdf'  
  6. var str4 = 'sljfhellooooodsdf'  
  7. var str5 = 'sljfhelloooooodsdf'  
  8. console.log(reg.test(str));//false  
  9. console.log(reg.test(str1));//true  
  10. console.log(reg.test(str2));//true  
  11. console.log(reg.test(str3));//true  
  12. console.log(reg.test(str4));//true  
  13. console.log(reg.test(str5));//false  
{n}示例
[javascript]  view plain  copy
  1. var reg = /hello{2}d/; //匹配hello,o 出现的次数只能为2次  后面紧跟一个d  
  2. var str = 'sljfhellodsdf';  
  3. var str1 = 'sljfhelloodsdf'  
  4. var str2 = 'sljfhellooodsdf'  
  5. var str3 = 'sljfhelloooodsdf'  
  6. var str4 = 'sljfhellooooodsdf'  
  7. var str5 = 'sljfhelloooooodsdf'  
  8. console.log(reg.test(str));//false  
  9. console.log(reg.test(str1));//true  
  10. console.log(reg.test(str2));//false  
  11. console.log(reg.test(str3));//false  
  12. console.log(reg.test(str4));//false  
  13. console.log(reg.test(str5));//false  

4. [ ] 和 | 符号的详细说明

[] 匹配内部出现任意一个元字符
| 相当于或的意思
[javascript]  view plain  copy
  1. var reg = /hello,[a-z]+/;//匹配 hello, 后面是小写字母  
  2. var str = 'hello,world';  
  3. var str1 ='hello,World';  
  4. var str2 ='hello,better';  
  5. var str3 ='hello,Better';  
  6. console.log(reg.test(str));//true  
  7. console.log(reg.test(str1));//false  
  8. console.log(reg.test(str2));//true  
  9. console.log(reg.test(str3));//false  

[javascript]  view plain  copy
  1. var reg = /hello,[world|better]/;//匹配 hello, 后面紧跟 world 或者 better  
  2. var str = 'hello,world';  
  3. var str1 ='hello,meinv';  
  4. var str2 ='hello,better';  
  5. var str3 ='hello,Better';  
  6. console.log(reg.test(str));//true  
  7. console.log(reg.test(str1));//false  
  8. console.log(reg.test(str2));//true  
  9. console.log(reg.test(str3));//false  
注意:这里的 [a-z] 在前面没有讲解到   这里表示 所有的小写字母,你也可以[a-c] 表示 abc中的一个 只是一种简写而已 同理   [0-9]表示0到9中的其中一个数字  那要表示字母数字 下划线 该如何表示呢    [a-z0-9A-Z_]  是不是感觉很强大。





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值