副标题[/!--empirenews.page--]
前言:
正则对于一个码农来说是最基础的了,而且在博客园中,发表关于讲解正则表达式的技术文章,更是数不胜数,各有各的优点,但是就是这种很基础的东西,如果我们不去真正仔细研究、学习、掌握,而是抱着需要的时候,就去网上找现成的正则表达式来使用,像这样恐怕永远都是很难对正则有一个详细且全面的了解。 所以通过查阅书籍、网上的资料以及通过自己的理解、组织、表达,写了这篇《JavaScript RegExp 基础详谈》,算是对自己学习过程的一次总结梳理吧。 如果有什么欠缺,遗漏或者不足的地方,多多麻烦大家的指正与建议。 PS:若有童鞋转载这篇文章,也是对我的认可,感激不尽,只希望能够注明转载的出处就好。
目录索引:
1. 正则表达式的概念 2. RegExp 对象 2.1 RegExp 对象 2.2 修饰符说明 2.3 RegExp对象方法 2.4 RegExp对象的属性 · 静态属性 · 实例属性
3. JS的正则基础语法 3.1 特殊字符一览表: 3.2 转义运算符 3.3 量词 3.4 边界 3.5 类 · 字符类 · 范围类 · 反向类 3.6 贪婪模式与非贪婪模式 3.7 分组 · 捕获性分组 · 非捕获性分组 · 分组嵌套 3.8 前瞻 3.9 运算符 3.10 其它
4. 支持正则的String方法 4.1 replace 4.2 match 4.3 split 4.4 search
5. 常用正则表达式收集
附录:参考页面
正则表达式(regular expression)描述了一种字符串匹配的模式。这种模式,我们可以理解成是一种“规则”。根据这种规则再去匹配符合条件的结果,而匹配的过程就是检索,查找、提取的过程。 正则表达式只能对字符串进行操作。这一点需要明确知道。 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。 随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。 剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。 基于不同平台或者是语言的 regular expression 并不相同,以下说的都是基于JavaScript语言的正则表达式。
2.1 RegExp 对象
RegExp是JavaScript中内置的正则对象,通过以下方法均可以创建一个正则对象的实例。
· 构造函数
var pattern = new RegExp('regexp','modifier');
regexp : 匹配的模式,也就是上文指的正则规则,实际上我们编写正则表达式的过程,都是对“规则”的定义过程。 modifier : 正则实例的修饰符。 示例:
var pattern = new RegExp('world','i');
var reg = new RegExp('name','ig');
· 字面量
var pattern = /regexp/modifier;
示例:
var pattern = /world/i;
var reg = /name/ig;
说明: 字面量与构造函数的区别就是,字面量更类似于定义一个变量,采用赋值的方式。这种方式创建正则实例是我们更加推荐使用的方式。 注意的是,字面量方式下正则实例创建的格式,即用一对斜杠(//)来包裹定义的规则,规则不能用定界符括起来,随后在附加上修饰符。
2.2 修饰符说明
“修饰符” 其含义类似于正则实例的附加属性。用于说明正则规则适用匹配的范围。
i : 表示区分大小写字母匹配。 m :表示多行匹配。 g : 表示全局匹配。 在非全局的情况下,正则会根据指定的“规则”从左至右对字符串进行匹配,一旦规则匹配完,便会停止匹配操作,返回结果。 在全局的的情况下,正则会根据指定的“规则”从左至右对字符串进行匹配,一旦规则匹配完,便会在当前字符串匹配位置 重新使用“规则”继续向下匹配,一直到字符串匹配完成。这也是下文中,我们会提到lastIndex属性存在的必要性。
2.3 RegExp对象方法
以下方法都是RegExp对象的内置方法,这些方法可以根据指定的规则来对字符串进行匹配,查找等。 可以支持正则表达式的方法,不仅仅只有RegExp对象才有,实际上String对象也具有同样功能的方法。这些我们下文会讲解到。
· test()
(编辑:淮北站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|