`
desert3
  • 浏览: 2164800 次
  • 性别: 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应用实例-正则表达式学习.js

    JavaScript应用实例-正则表达式学习.js

    编译原理--正则表达式文档

    - **内置函数库**: 大多数编程语言如 Python、Java、JavaScript 都有内置的正则表达式库,提供方便的接口进行模式匹配。 - **模式匹配**: 用于字符串查找、替换、分割等操作,例如 `re.findall()` in Python 或 `...

    图灵程序设计丛书-正则表达式必知必会.pdf

    11. **正则表达式引擎**:不同的编程语言或工具可能使用不同的正则表达式引擎,如Perl兼容正则表达式(PCRE)、JavaScript的正则表达式等,它们可能存在细微的语法差异。 通过学习《正则表达式必知必会》,读者不仅...

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

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

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

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

    正则式工具(自动生成正则表达式)

    4. **代码生成**:对于多种编程语言,如Java、Python、JavaScript等,工具可以生成对应的代码片段,方便将正则表达式集成到项目中。 5. **学习资源**:为了帮助用户深入理解正则式,工具可能还包含教程、参考资料和...

    正则表达式学习手册

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

    javascript正则表达式

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

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

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

    使用正则表达式拆分字符串

    下面将详细阐述正则表达式的概念、语法以及如何在不同编程语言中实现字符串的拆分。 1. 正则表达式基础 - **模式匹配**:正则表达式由一系列字符和特殊符号组成,用于定义一个模式,该模式可以匹配特定的字符串。 ...

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

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

    三目运算符+正则表达式

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

    正则表达式调试工具

    以及在编程语言中作为字符串处理的利器,如Python的`re`模块,JavaScript的`match`、`search`和`replace`等函数。 综上所述,"正则表达式调试工具V3.0 绿色免费版"是一款实用的开发辅助工具,不仅提供了基本的正则...

    通过正则表达式生成数据

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

    Javascript正则表达式教程

    ### JavaScript正则表达式教程详解 #### 一、正则表达式概述 正则表达式是一种强大的工具,用于处理文本中的模式匹配与替换。它由一系列普通字符和特殊字符(元字符)组成,用于定义一组规则,从而识别并操作符合...

    naturalregex一个允许你用自然语言编写正则表达式的解析器

    《自然语言正则表达式解析器:natural-regex在JavaScript中的应用》 在编程领域,正则表达式(Regular Expression)是一种强大的文本处理工具,它能够有效地进行模式匹配、查找、替换等操作。然而,传统的正则...

    源码(精通正则表达式&实战正则表达式)

    在JavaScript环境中,正则表达式与其他语言有所不同,它既支持字面量表示法(如`/pattern/flags`),也支持构造函数表示法(如`new RegExp('pattern', 'flags')`)。此外,JavaScript提供了`test()`、`match()`、`...

    精通正则表达式中文版英文版_中文版为扫描版

    书中的例子涵盖了多种编程语言,如Perl、Java、JavaScript、.NET等,这些语言的正则表达式引擎虽然大同小异,但在细节上有所区别,学习者将了解到如何在不同环境下应用正则表达式。 对于初学者,书中会引导他们理解...

Global site tag (gtag.js) - Google Analytics