关于正则表达式的一些基础知识

Posted

tags:

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

预定义类,特殊类:
1.\d [0-9]

2.. [^\r\n],非\r和\n外的所有字符

3.\D [^0-9]

4.//代表/本身

5.\s[\t\n\xOB\f\r] 空白符

6.\w[a-zA-Z_0-9]单词字符(字母.数字,下划线)

7.\W[^a-zA-Z_0-9]非单词字符


修饰符:
修饰符用于正则匹配公式//后面,如/\d/g,/*.{5,8}/g

1.g,匹配字符串所有字符,多次匹配,不添加搜索到第一个匹配停止,

2.i ignore case 忽略大小写

3.m:multiple lines 多行搜索


特殊字符:* + ? $ ^ . | \ () {} []

[]:字符类,把一系列匹配符归为一类,符合类里面任意一个匹配方式即可
如:‘1b2c3d4e5‘.replace(/[abc]/g,‘x‘)
//"1x2x3d4e5"

^:反向类,用于匹配不属于某类的内容,仅用于中括号内
如:‘1b2c3d4e5‘.replace(/[^abc]/g,‘x‘)
//xbxcxxxxx"

-:范围类,[a-z],用于匹配a到z之间的字符
如‘a1b2c3d4x5z9‘.replace(/[a-z]/g,‘啊‘)

//"啊1啊2啊3啊4啊5啊9"
注意:匹配-(横线)与范围类字符时,只要在后面加-即可,如‘2015-12-01‘.replace(/[0-9-]/g,‘a‘)//"aaaaaaaaaa"

 

边界符:

^:以XXX开始,需在中括号外使用

$:以XXX结束,需在中括号外使用

^和$分别代表字符串的开始和结束,因此^\d$只能匹配包含一个数字的字符串


\b:单词边界

\B:非单词边界

\b匹配的是字之间的看不见的边界,每个单词前后都有 \b


量词:

?:出现一次或没有

+:出现一次或多次

*:出现任意次

{n}:出现n次

{n,m}:出现n-m次

{n,}:出现最少n次


分组:用()可以达到分组功能,使量词作用于分组

如:检测字符串中是否有7个boy
/boy{7}/g.test(‘boyboyboyboyyyyyyy‘)
//true
因为这里匹配的是y{7}
/(boy){7}/g.test(‘boyboyboyboyyyyyyy‘)

或符号:|

反向引用:分组后可以用$num代表一个分组,用于字符串位移
如:把2016-11-25改成11/25/16
‘2016-11-25‘.replace(/(\d{4})-(\d{2})-(\d{2})/g,‘$3/$2/$1‘)
//"25/11/2016"


匹配函数使用方式: 注意:默认大小写敏感
匹配判断

方式1. /正则公式/.test(要匹配的参数),返回值true or false
如/\d\d\d/.test("123"), //true

方式2. 显式调用方式,new RegExp(正则公式).test(要匹配参数)
如new RegExp(/\d\d\d/).test(123),//true

 

匹配替换
方式1.JS里字符串默认自带的函数: 要匹配的字符串.replace(正则公式,替换字符),返回值为替换后的字符串
如‘He is a boy.This is a dog.where is he?‘.replace(/\bis\b/,‘IS‘)
//"He IS a boy.This is a dog.where is he?"


方式2.RegExp构造函数:首先声明 var reg=new RegExp(正则公式,匹配方式),然后要匹配的字符串.replace(正则对象,替换字符)
如:var reg=new RegExp(‘\\bis\\b‘,‘g‘)
‘He is a boy.This is a dog.where is he?‘.replace(reg,‘IS‘)
//"He IS a boy.This IS a dog.where IS he?"

注意:方式2里,RegExp构造函数函数的第一个参数需要传的是字符串而不是匹配公式,所以\需要转意为\\

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

关于grep的使用以及正则表达式

js正则表达式

关于java的正则表达式的一些疑惑……

[正则表达式]基础工具书篇 关于边界

关于正则表达式的入门心得

[正则表达式]基础工具书篇 所有关于?的