不靠谱的正则入门

何为正则

正则使用的范围相当广泛,在各种各样的编程语言或者脚本语言都能看到他们的身影;那么,何为正则.
就我个人理解,就是个过滤器,用特定的符号去匹配特定的内容,变动特定的符号的组合来达到匹配各种各样自己需要得到的内容
我们这里不谈所谓的正则解析引擎,也不过多的深入,只是平时粗浅使用的经验总结

特定符号[元字符]

千篇一律,介绍下元字符

元字符作用简单描述
.匹配除换行符以外的任意字符
\w匹配字母、数字、下划线或行字
\W匹配任意非字母、数字、下划线或汉字的字符
\s匹配任意的空白符
\S匹配任意非空白符的字符
\d匹配数字
\D匹配任意非数字的字符
\b匹配单词的开始或结束
\B匹配不是单词开口或结束的位置
^匹配字符串的开始
$匹配字符串的结束
\G上一个匹配的结尾(本次匹配开始)
\A字符串开头(类似^,但不受处理多行选项的影响)
\Z字符串结尾或行尾(不受多行选项的影响)
\z字符串结尾(类似$,但不受处理多行选项的影响)
*重复匹配零次或更多次
+重复匹配一次或多次
?重复匹配零次或一次
{n}重复匹配n次
{n,}重复匹配n次或更多次
{n, m}重复匹配n到m次
\n匹配一个换行符。等价于\x0a和\cJ。
\r匹配一个回车符。等价于\x0d和\cM。

字符转义

需要转义的字符有:$, (, ), *, +, ., [, ], ?, , ^, {, }, |。

零宽断言

零宽断言表示匹配字符的时候再添加一些定位条件,使匹配更精准。

正则表达式说明
\w+(?=ing)匹配以ing结尾的多个字符(不包括ing)
\w+(?!ing)匹配不是以ing结尾的多个字符
(?<=re)\w+匹配不是以re开头的多个字符(不包括re)
(?<!re)\w+匹配不是以re开头的多个字符
(?<=\s)\d+(?=\s)匹配两边是空白符的数字,不包括空白符

贪婪与懒惰

贪婪: 匹配尽可能长的字符串;

懒惰:匹配尽可能短的字符串;

懒惰模式的启用只需在重复元字符之后加上?即可。

JS正则

在ES5中,JS的正则声明的写法类似数组或者对象,也是通过new来实现

var re = new RegExp();

这货接受两个参数,匹配的内容及处理方式

var re = new RegExp("age","igm")

var re = new RegExp(/age/igm) 此时不能接受第二个参数,因为已经包含

或者

var re = /age/igm; 此时不能接受第二个参数,因为已经包含

其中的igm分别代表,忽略大小写,全局匹配,多行匹配[可选项,一个多个模式都行]

声明之后,应有调用:

  • test - RegExptest方法用来测试字符串是否匹配给出的匹配模式,返回布尔值;
  • exec - RegExpexec方法返回包含第一个匹配的的数组或null
  • match - Stringmatch方法返回包含所有匹配子字符串的数组;
  • replace - Stringreplace方法完成string的替换操作,支持正则表达式;
  • search - 与Stringindexof方法类似,不同的是search支持正则表达式,而不仅仅是字符串;
  • split - 按照一定规则拆分字符串并将子字符串存储到数组中的String方法。

方法测试

以下chrome下的console跑的

 var re = new RegExp("m","mgi"); //声明
 
 re.test("abcdefg"); //return false
 
 re.exec("kvsdlkfjzj;vjm"); //["m"]

 str = "fasklweoiaurjafm.;kzscmz.,mca cmvnka;djfaw;eruweiorj"
 str.match(re);    //["m", "m", "m", "m"]
 str.search(re);   //15
 str.replace(re,"AAA") //"fasklweoiaurjafAAA.;kzscAAAz.,AAAca cAAAvnka;djfaw;eruweiorj"

 re2 = /;/g;
 str.split(re2)   //["fasklweoiaurjafm.", "kzscmz.,mca cmvnka", "djfaw", "eruweiorj"]
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crper

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值