`
desert3
  • 浏览: 2159346 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

JavaScript语言精粹读书笔记- 正则表达式

 
阅读更多
正则表达式
JavaScript的许多特性都借鉴自其他语言。语法借鉴自Java,函数借鉴自Scheme,原型继承借鉴自Self,正则表达式借鉴自Perl
正则表达式是一门简单语言的语法规范。它以方法的形式被用于对字符串中的信息进行查找、替换和提取操作。可处理正则表达式的方法有regexp.exec、regexp.test、string.match、string.replace、string.search和string.split。通常来说,在JavaScript中正则表达式相较于等效的字符串运算有着显著的性能优势。

一个例子An Example
(?:…)表示一个非捕获型分组(noncapturing group)
(….)标识一个捕获型分组(capturing group)。一个捕获型分组将复制它所匹配的文本,并将其放入result数组中。每个捕获型分组都将被指定一个编号。第一个捕获型分组的编号是1
[…]标识一个字符串类

结构Construction
有两个方法来创建一个RegExp对象:RegExp构造器和正则表达式字面量。优先使用的方法是正则表达式字面量。
正则表达式字面量被包围在一对斜杠中。这有点令人难以捉摸,因为斜杠也被用作除法运算符和注释符。
有3个标志能在RegExp中设置。它们分别由字母g、i和m来标识。这些标志被直接添加在RegExp字面量的末尾。
G:全局的(匹配多次;准确含义随方法而变)
I:大小写不敏感(忽略字符大小写)
M:多行(^和$能匹配行结束符)

RegExp构造器:第一个参数是被编译成正则表达式的字符串(双写反斜杠转义),第二个参数是一个指定标志的字符串。
RegExp构造器适用于正则表达式必须在运行时动态生成的情景
RegExp对象的属性:
global,ignoreCase,multiline,lastIndex:下一次exec匹配开始的索引、初始值为0,source:正则表达式源代码文本

正则表达式字面量创建的RegExp对象是共享一个单实例
function make_a_matcher(){return /a/ig;};
var x = make_a_matcher();
var y = make_a_matcher();
// 注意:x和y是相同的对象!
x.lastIndex = 10;
document.writeln(y.lastIndex);  // 10

元素
正则表达式选择
一个正则表达式选择包括一个或者多个正则表达式序列。这些序列被|(竖线)字符分隔。如果这些序列中的任何一项符合匹配条件,那么这个选择就被匹配。它尝试按顺序依次匹配这些序列。所以:”into”.match(/in|int/)将在into中匹配in。但它不会匹配int,因为in已被匹配成功了。
正则表达式序列
一个正则表达式序列包含一个或者多个正则表达式因子。每个因子能选择是否跟随一个量词,这个量词决定着这个因子被允许出现的次数。如果没有指定这个量词,那么该因子将被匹配一次。

正则表达式因子
一个正则表达式因子可以是一个字符、一个由圆括号包围的组、一个字符类,或者是一个转义序列。除了控制字符和特殊字符外,所有的字符都将被按照字面处理:\/[ ](){}?+*|.^$
如果你希望上面列出的字符按字面去匹配,那么必须要用一个 \ 前缀来进行转义。当你存在疑虑时,可以给任何特殊字符加一个 \ 前缀来使其字面化。\ 前缀不能使字母或数字字面化。
一个未被转义的 . 将匹配除行结束符以外的任何字符。
当lastIndex属性值为0时,一个未转义的 ^ 将匹配该文本的开始。当指定了m标识时,它也能匹配行结束符。一个未转义的 $ 将匹配该文本的结束。当指定了m标志时,它也能匹配行结束符。
正则表达式转义
正则表达式分组
分组共有4组。
捕获型:一个捕获型分组是一个被包围在括号中的正则表达式选择。任何匹配这个分组的字符都将被捕获。每个捕获分组都将被指定了一个数字。在正则表达式中第一个捕获(的分组是1。第二个捕获(的分组是2。
非捕获型:分捕获型分组有一个(?:前缀。非捕获型分组仅做简单的匹配;并不会捕获所匹配的文本。这会有微弱的性能优势。非捕获型分组不会干扰捕获型分组的编号。
向前正向匹配(Positive lookahead):向前正向匹配组有一个(?=前缀。它类似与非捕获型分组,但这个组匹配后,文本将倒回到它开始的地方,实际上并不匹配任何东西。这不是一个好特性。
向前负向匹配(Negative lookahead):向前负向匹配组有一个(?!前缀。它类似于向前正向匹配,但只有当它匹配失败时它才进行匹配。这不是一个好的特性。

正则表达式类Regexp Class正则表达式类是一种指定一组字符的便利方式。例如,如果想匹配一个元音字母,我们可以写作(?:a|e|i|o|u),但它可以被更方便地写成一个类[aeiou]。类提供了两个方便特性:指定字符范围和类的求反。

正则表达式类转义
正则表达式量词Regexp Quantifier
?:{0,1};*:{0,};+:{1,}
如果只有一个量词,则趋向于进行贪婪性匹配,即匹配尽可能多的重复直至达到上限。如果这个量词后面还有一个额外的后缀?,那么则趋向于进行懒惰性匹配,即试图匹配尽可能少的必要重复。一般情况下最好坚持使用贪婪性匹配。


分享到:
评论

相关推荐

    常用正则表达式大全.txt

    根据提供的文件信息,我们可以整理出一系列与正则表达式相关的知识点。这些知识点涵盖了从基本的数字验证到复杂的字符串匹配等多个方面。下面是详细的知识点总结: ### 基本概念 正则表达式是一种用于文本模式匹配...

    JavaScript--正则表达式

    ### JavaScript中的正则表达式详解 #### 正则表达式概念 正则表达式(Regular Expression)是一种在字符串中寻找特定字符或字符集的强大工具。它由一系列字符和特殊符号组成,用于匹配文本中的字符串模式。在...

    regextester-正则表达式测试器

    regextester-正则表达式测试器,汉化版。regextester-正则表达式测试器,汉化版

    jscript-正则表达式

    在JavaScript(JScript)中,正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和提取字符串中的模式。它是编程语言中的一个...通过阅读《jscript-正则表达式.chm》文档,你可以更深入地学习和实践这些知识。

    数据挖掘与数据管理-正则表达式.pptx

    "数据挖掘与数据管理-正则表达式" 数据挖掘与数据管理是当前非常热门的领域,数据挖掘是指从大量数据中发掘有价值的信息或知识的过程,而数据管理则是指对数据的收集、存储、保护和维护等过程。数据挖掘与数据管理...

    正则表达式必知必会v_1.0.pdf

    正则表达式是一种语言,具有其自己的语法和语义。它们通常内置于一些编程语言、软件产品中,如JavaScript、Java、Notepad++等。正则表达式的语法比较容易理解,但学习正则表达式的主要困难在于如何灵活运用这些规则...

    正则表达式学习手册

    ### 正则表达式学习手册知识点总结 #### 1. 引言 正则表达式是一种强大的文本处理工具,能够帮助用户实现字符串的查找、替换等功能。正则表达式的应用场景非常广泛,尤其在编程领域中不可或缺。对于初学者来说,...

    javascript正则表达式

    ### JavaScript 正则表达式知识点解析 #### 一、概述 正则表达式是一种强大的文本匹配工具,在JavaScript中被广泛应用于字符串操作、表单验证、数据清洗等场景。本篇文章将根据提供的描述和个人总结,详细介绍...

    JavaScript 数据校验 正则表达式 示例代码

    正则表达式 示例代码JavaScript 数据校验 正则表达式 示例代码JavaScript 数据校验 正则表达式 示例代码JavaScript 数据校验 正则表达式 示例代码JavaScript 数据校验 正则表达式 示例代码JavaScript 数据校验 正则...

    使用正则表达式验证一年的12个月份

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换等操作,广泛应用于编程语言中。在IT行业中,正则表达式是处理字符串时不可或缺的一部分,尤其在数据验证、文本提取等方面。在这个场景中,我们需要创建一...

    正则表达式验证器,验证常用的编程语言的正则表达式

    这个验证器特别适用于程序员,他们可能需要在多种不同的编程语言中使用正则表达式,如JavaScript、Python、Java、C#等。每种语言虽然都支持正则表达式,但其语法和行为可能略有差异,因此验证器是一个极好的辅助工具...

    正则表达式笔记归纳

    它在多种编程语言中都有应用,尤其是在JavaScript中,正则表达式被广泛用于数据验证、文本提取等方面。 #### 二、正则表达式的语法元素 正则表达式由一系列字符和特殊符号组成,用以匹配字符串中的特定模式。下面...

    三目运算符+正则表达式

    在许多编程语言中,都有内置的库或函数支持正则表达式操作。 例如,如果我们想验证一个字符串是否为有效的电子邮件地址,可以使用以下正则表达式: ```java String email = "example@example.com"; boolean is...

    精通正则表达式(第三版)简体中文版

    - **JavaScript中的正则表达式**:JavaScript的正则表达式对象提供了丰富的功能,包括全局匹配、忽略大小写等选项。 - **.NET框架中的正则表达式**:通过System.Text.RegularExpressions命名空间提供支持。 #### 六...

    C++ 正则表达式 使用手册 源代码

    - C++的 `<regex>` 库支持ECMAScript风格的正则表达式,这意味着它遵循JavaScript中的大部分规则,同时也包括一些扩展特性。 8. **标志和修饰符** - 正则表达式可以搭配不同的标志,如 `std::regex_constants::i...

    正则表达式列举 代码 项目中直接使用

    除了上述纯正则表达式的示例,文件还包含了JavaScript事件处理函数中的正则应用案例,这些函数用于限制输入字段的字符类型,例如只允许中文、全角字符或数字输入,以及验证字符串中是否存在非ASCII字符。 这些正则...

    通过正则表达式生成数据

    2. **利用编程语言**:大多数编程语言如Python、Java、JavaScript等都内置了正则表达式的支持,并提供了方法来生成符合正则表达式的随机字符串。例如,Python的`re`模块配合`random.choice`或`random.choices`可以...

    正则表达式(日期校验)

    在深入了解具体实现之前,我们先简要回顾一下正则表达式的相关概念以及JavaScript中的日期对象。 ##### 1. 正则表达式基础 - **语法结构**:正则表达式是由一系列字符和特殊符号组成的模式串,用于匹配字符串中的...

Global site tag (gtag.js) - Google Analytics