正则表达式

Posted rkgg07kj3gs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

介绍

        正则表达式是regular expression(规则表达式),就是定义字符串规则的表达式,语法基于一种古老的perl语言,它描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

        正则表达式并不是只有前端才有,很多后端语言也都支持正则,正则本身是独立于语言之外的。当初的浏览器是用来浏览一些新闻之类的文字信息,那么对于字符串的操作就比较重要了,比如验证表单,模糊搜索等。

语法

第一种  new创建正则

1 var reg=new RegExp(a)
2 var str=abcdefg;
3 console.log(reg.test(str));  // 返回bool值true,代表是否匹配成功

第二种  字面量创建正则

        字面量定义正则的话两条斜线之间的任意字符都是有含义的,都会纳入到正则判断里

var reg = /a/
var str=abcdefg;
console.log(reg.test(str)) // true

特殊字符

[ ] 中括号:匹配其中的某一个字符

[abcde]  匹配abcde其中任意一个

[a-z]        匹配所有小写字母

[0-9]        匹配任意一个数字

( ) 小括号 分组:小括号里面的内容作为整体进行匹配

/(ab) | (cd)/   匹配 ‘ab‘ 或者 ‘cd‘

/(a|b)cd/          匹配 ‘acd‘ 或者 ‘bcd‘

注意:小括号、竖线不要放在 [ ] 内(无意义)

| : 或,跟js中的(||)一样

^:排除(除了) 类似js中的(!)

^ (不在中括号里)匹配字符串开头

$ 匹配结尾

/^ $/ 这样的正则代表完整匹配

 

转义字符:元字符

        所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

元字符  含义  等价表达式
d
数字 [0-9]
D 非数字 [^0-9] 
w 数字,字母,下划线 [a-z0-9_A-Z]
W 非数字,字母,下划线 [^a-z0-9_A-Z]
s 空白字符   
非空白字符  
. 全部字符   
匹配单词边界   
B 匹配 非 单词边界   
(数字0) 匹配 NUL 字符  
匹配 换行符   
匹配 换页符  
  匹配 回车符  
  匹配 制表符   
v 匹配 垂直制表符  
u4e00 - u9fa5 验证中文  
u5343u950bu4e92u8054  千锋互联   

 

量词

        正则表达式的一个符号块只能匹配文本中的一个符号,如果要多次匹配那么我们就需要量词

量词 含义 等价表达式
{n} 匹配n次  
{n,m} 最少n次,最多m次  
{n,} 最少n次,最多不限  
+ 最少1次,最多不限 {1,}
? 可有可无,最多一个 {0,1}
* 可以有也可以没有,个数不限 {0,}

修饰符

i   代表让正则不区分大小写

g  代表全局查找

代表多行查找(必须与g一起使用,并且,当使用^和$模式时才会起作用)

        如:

1 var re = new RegExp(a, i)
2 var re= /a/i

        多个修饰符可以写在一起

1 var re = new RegExp(a, ig)
2 var re= /a/ig

直接量字符

        正则中有一些字符本身是具有含义的,那么如果我们要匹配这个字符就需要用到  转义

     
/ 匹配 / \ 匹配 . 匹配 .
* 匹配 * + 匹配 + ? 匹配 ?
匹配| ( 匹配 (
[ 匹配 [ ] 匹配 ] { 匹配 {
} 匹配 } ’ 匹配 单引号 ” 匹配 双引号
xxx 查找以八进制数 xxx 规定的字符 xdd 查找以十六进制数 dd 规定的字符 uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符

正则对象的API

方法(API) 描述
test 用来测试某个字符串是否与正则匹配,匹配就返回true,否则返回false
compile 该方法的作用是能够对正则表达式进行编译,被编译过的正则在使用的时候效率会更高,适合于对一个正则多次调用的情况
exec 返回的是一个数组,数组元素为匹配的子字符串

test方法

1 var reg = /a/
2 var str = abcdefg;
3 console.log(reg.test(str));  // true

compile方法

1 var reg=/[abc]/gi
2 console.log(reg.test(a))
3 
4 reg=/[cde]/gi
5 reg.compile(reg)
6 console.log(reg.test(a))
7 console.log(reg.test(a))

exec方法

var str = dadf123dsafd33dfds;;;[]123dg;123
var reg = /d+/
var arr = reg.exec(str)
console.log(arr) // [‘123‘] 

支持正则的字符串API

方法(API) 描述
search 查找第一次匹配的子字符串的位置  ,如果找到就返回一个number类型的index值,否则返回-1
replace
该方法用来将字符串中的某些子串替换为需要的内容,接受两个参数,第一个参数可以为正则或者子字符串,表示匹配需要被替换的内容,第二个参数为被替换的新的子字符串
split 将一个字符串拆分成一个数组,它接受一个正则或者子字符(串)作为参数,返回一个数组
match 接收一个正则作为参数,用来匹配一个字符串,返回一个数组

 

 

以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

攻破难啃的骨头-正则表达式(转)

正则表达式的贪婪和非贪婪模式