北京-第六十五期正则表达式

Posted 葡萄藤IT技能树

tags:

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

一、背景介绍           

什么是正则表达式

    Regular Expression使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。

    正则表达式的“鼻祖”或许可一直追溯到科学家对人类神经系统工作原理的早期研究。美国新泽西州的Warren McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方面的科学家,研究出了一种用数学方式来描述神经网络的新方法,他们创造性地将神经系统中的神经元描述成了小而简单的自动控制元,从而作出了一项伟大的工作革新。

    在1951 年,一位名叫Stephen Kleene的数学科学家,他在Warren McCulloch和Walter Pitts早期工作的基础之上,发表了一篇题目是《神经网事件的表示法》的论文,利用称之为正则集合的数学符号来描述此模型,引入了正则表达式的概念。

二、知识剖析

REGEXP对象:

JS通过内置对象 RegExp支持正则表达式,有两种方法实例化对象

1.字面量:var reg=/\bis\b/;          object.replace(reg,'IS')

2.构造函数    var reg=new RegExp('\\bis\\b')

字符类:可以使用元字符[]来构建一个简单的类  例如[abc]  有其中一个就行

字符类取反:^

范围类:[a-z]从a到z任意字符,是个闭区间包含a和z本身   [a-zA-Z] 表示大小写从a到z。‘2016-09-12’.replace(/[0-9-]/g,'A'),如果想匹配-在0-9后面加个-就行了

预定义类:

边界:^ 以xxx开始,$以xxx结束,\b单词边界,\B非单词边界

量词:?出现零次或一次,+出现一次或多次(至少出现一次),*出现零次或多次(任意次),{n}出现n次,{n,m}出现n到m次,{n,}至少出现n次

贪婪模式:尽可能多的匹配

非贪婪模式:?

分组:Byron{3}   注意这个是n重复三次,不是整个单词。分组()

或:| 多个分支,走任意一个

反向引用:分组()   $1$2$3,分组捕获

忽略分组:(?:)(?:Bson)(ok)

前瞻:正则表达式从文本头部想文本尾部解析,文本尾部方向称为前

前瞻就是正则表达式在匹配到规则的时候,向前检查是否符合断言。后瞻方向相反。JS不支持后顾

符合和不符合特定断言称为肯定/正向匹配和否定/负向匹配

正向前瞻:exp(?=assert)   ‘a2*3’.replace(/\w(?=\d)/g,'X')  X2*3

负向前瞻:exp(?!assert)

对象属性:

1.global

2.ignore case

3.multiline

4.lastIndex:当前表达式匹配内容的最后一个字符的下一个位置。

5.source:正则表达式文本字符串

字符串对象方法:

1、String.prototype.search(reg),用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

方法返回第一个匹配结果index,差找不到返回-1

search()方法不执行全局匹配,它将忽略标志g,并且总是从字符串的开始进行检索

2、String.prototype.match(reg),将检索字符串,以找到一个或多个与regexp匹配的文本。regexp是否具有标志g对结果影响很大。

String.prototype.match(reg,function)


三、常见问题

正则表达式方法:RegExp.prototype.text(str)

用于测试字符串参数中是否存在匹配正则表达式模式的字符串。检测text内容里面是不是和前面正则表达式匹配。

var reg1=/\w/;

while(reg1.test('ab')){

console.log(reg1.lastIndex)

}


四、解决方案

RegExp.prototype.exec(str)

使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果。如果没有匹配的文本则返回null,否则返回一个结果数组。返回数组包括

1.index声明匹配文本的第一个字符串的位置

2.input 找的谁。

五、编码实战


'a1b2c3d4'.replace(/[a-z]\d/g,'IS')

'a2*3'.replace(/\w(?=\d)/g,'X')   前瞻

"abcabcdef".search(/(abc)/)    搜索

“aabbbbcc“.repleace(/b+?/,"1")    替换


六、拓展思考

JS中如何应用正则表达式

七、参考文献

30分钟精通正则表达式

PPT链接:

视频连接:



以上是关于北京-第六十五期正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript学习(六十七)—正则表达式学习总结

JavaScript学习(六十九)—正则表达式实训题

第十五章 shell正则表达式

Java编程十五讲第八讲:正则表达式

JavaSE 学习笔记之正则表达式(二十五)

第六章 正则表达式