了解正则表达式的基本含义和操作

本文来自《正则表达式必知必会》的总结,因为本人也算才入门,只是分享一下,也给自己做个总结。同时希望更多的人能够理解其中的含义,而不只是上网百度之后直接就拿来用,本来正则没有那么难~以下引自书中的话将使用引用的方式声明。

正则表达式就是用来筛选一些自己想要或者不想要的字符串。比如:手机号、邮箱、身份证等。

正则表达式被简称为模式,他们是有一些字符构成的字符串。这些字符可以是普通字符和元字符


元字符 .
字符描述
.查找单个字符,除了换行和行结束符

通过元字符.可以匹配除了换行符以外的任意字符。

let reg = /a.c/;
let str = "abc";
reg.test(str)  //true

上述例子中的test()为JavaScript中的RegExp方法,它能够测试字符串中指定的值。返回 true 或 false。
在JavaScript中有两大类方法,分别是RegExp方法和String方法。

  • RegExp方法说白了就是以 正则在前,要检索的字符串在括号里。regexp.test(string)
  • String方法就是字符串在前,要检索的正则在括号里 string.match(regexp)

那么方法总共有这些:

RegExp方法
方法描述
exec检索字符串中指定的值。返回找到的值,并确定其位置。
test检索字符串中指定的值。返回找到的值,并确定其位置。
String方法
方法描述
search检索与正则表达式相匹配的值。
match找到一个或多个正则表达式的匹配。
replace替换与正则表达式匹配的子串。
split把字符串分割为字符串数组。

使用[]来匹配字符集合。
let reg = /[ns]a/;
let str = "na";
let str2 = "sa";
reg.test(str)     //true
reg.test(str2)    //true

验证某个模式能不能获取预期的匹配结果并不难,但验证它不会匹配到你不想要的东西可就没那么困难了。

我只想匹配na或者sa,结果却把其他的也给匹配进来了。

let reg = /[ns]a/;
let str = "cna";
reg.test(str)    //true

[0-9]能够匹配0123456789,也就是说/[0-9]//[0123456789]/等价,其他的还有/[A-Z]// /[a-z]/等。

在实际工作中,最常用的字符区间还是数字字符区间和字母字符区间

^元字符,本意是匹配以^开头的字符

let reg = /^[0-9]/;
let str = "1n";
reg.test(str)      //true

let reg = /^[0-9]/;
let str = "n1";
reg.test(str)      //false

但是放在[]集合里,意思为取反。[^x] 匹配除了x以外的任意字符

let reg = /[^0-9]/;
let str = "n";
reg.test(str)     //true

let reg = /[^0-9]/;
let str = "1";
reg.test(str)     //false

以上做个总结:

元字符[]用来定义一个集合,含义是必须匹配这个集合里面的任意字符之一。
. 在[]集合里面放入^意为取非。这将把给定的字符集合排除在外。
/[^0-9]/的意思为,除了0到9之外的都将匹配


元字符代表匹配某一类别的字符

  • 数字类别
元字符描述
\d任何一个数字字符(等价于[0-9])
\D任何一个非数字字符(等价于[^0-9])
let reg = /marry\[[\d][\d]\]/;    //匹配 marry[xx]  xx为两个数字     \为转义符
let str = "marry[15]";
reg.test(str)            // true

let reg = /marry\[[\d][\D]\]/;
let str = "marry[15]";
reg.test(str);           // false

let reg = /marry\[[\D][\D]\]/;
let str = "marry[ab]";
reg.test(str);           // true
  • 字母数字类别
元字符说 明
\w任何一个字母和数字字符(大小写均可)或下划线字符(等价于[a-zA-Z0-9_])
\W任何一个非字母和数字字符或非下划线(等价于[^a-zA-Z0-9_])
  • 空白字符
元字符说 明
\s任何一个空白字符(等价于[\f\n\r\t\v])
\S任何一个非空白字符(等价于[^\f\n\r\t\v])

元字符 +
元字符说 明
+匹配1个或多个字符

该元字符能够匹配最少一个,最多N个字符。
如果要匹配邮箱,就需要使用+。如下:

let reg = /\w+@\w+\.\w+/;     //使用转义符对.进行转义
let str = "text@test.com"
 reg.test(str)           //true

这样可以简单的匹配一个常见邮箱。如果严谨点,可以如下设置:

let reg = /[\w\.]+@[\w\.]+\.\w+/

这样可以多匹配几个.来控制地址。

元字符*
元字符说 明
*匹配0个或多个字符
let reg = /\w+[\w\.]*@[\w\.]+\.\w+/
let str = "text@test.com"
reg.test(str)          //true

相比上面开头少了匹配.和后面添加了一个[\w\.]*,这样设置可以控制text.后面和@前面这段是否出现。因为使用*可以匹配0个或者多个。

*与+的区别是:+匹配一个或多个字符,最少要匹配一次;*匹配零个或任意多个字符,可以没有匹配。

元字符?
元字符说 明
?匹配0次或1次

比如:

let reg = /http:\/\/[\w./]+/                   //这里想要匹配 http://,  但是需要对//进行转义,因此写成 \/\/
let str = "http://www.baidu.com"
reg.test(str)          //true

如上只能匹配http开头的,如果想要匹配https,可以这样设置

let reg = /https?:\/\/[\w./]+/
使用{}可以定义精确的范围

如上几个元字符*+能够匹配一些不确定的字符,我们没法精确控制个数。那么使用{}可以精确的控制个数

元字符说 明
{}精确的控制个数
let reg = /\w{5}.\w{3}/
let str = "baidu.com"
reg.test(str)       //true

为重复匹配设定一个区间
也就是说,在{}这样的基础上,填入几就是控制几个字符。如果填入{2,5}这样的话,就是最少出现2次,最多出现5次。

最少匹配几次,或多次
{3, }这样设置就是最少出现3次,或多次。


元字符\b
元字符说 明
\b用来规定边界
let reg = /cat/
let str = "cat cation"
reg.test(str)         //true

如上代码想要匹配 cat 这个单词,但是例子中两个都能够匹配上。所以想要单独只匹配 cat 的话,需要使用边界符

let reg = /\bcat\b/
let str = "cat"
reg.test(str)         //true

let reg = /\bcat\b/
let str = "cation"
reg.test(str)         //false

另外两个常用的匹配边界^ and $

^匹配字符串的开头,如:

let reg = /^\d/
let str1 = "1234"
let str2 = "a1234"

reg.test(str1)  	// true
reg.test(str2) 		// false

相应的,$匹配字符串的结尾。如:

//我们把字母换个位置

let reg = /\d$/
let str1 = "1234"
let str2 = "1234a"

reg.test(str1)       // true
reg.test(str2)       // false
元字符|

|表示或,如:

let reg = /19|20/;
let str = "1937";
reg.test(str)        //true

//把1937换成2018,同样返回true

let reg = /19|20/;
let str = "2018";
reg.test(str)        // true

以上就是比较常见的正则表达式符号了,还有其他的比如说:()匹配模式、回溯引用和向前查找等,这里就不在说了,感兴趣的同学可以买下《正则表达式必知必会》看看,还是挺好的。最后我感觉作者的一句话非常好。同时也是最重要的:

验证某个模式能不能获得预期的匹配结果并不困难,但如何验证它不会匹配到你不想要的东西可就没那么简单了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值