摘要:str.match(regexp) str.match(regexp) 方法在字符串 str 中查找 regexp 的匹配项。 它有 3 种模式: 如果 regexp 不带有修饰符 g,则它以数组的形式返回第一个匹配项,其中包含捕获组和属性 index(匹配项的位置)、input(输入字符串,等于
阅读全文
摘要:y 修饰符让我们能够在源字符串中的指定位置进行搜索。 为了掌握 y 修饰符的使用方式,让我们来看一个实际的例子。 正则表达式的常见任务之一就是“词法分析”:例如我们得到了一个代码文本,我们需要找到它的结构元素。例如,HTML 有标签和特性(attribute),JavaScript 代码有函数、变量
阅读全文
摘要:有些正则表达式看起来很简单,但执行起来耗时却非常长,甚至会导致 JavaScript 引擎“挂起”。 大多数开发者迟早会遇到这样的情况。典型的症状就是 —— 正则表达式有时可以正常工作,但对于某些字符串,它会消耗 100% 的 CPU 算力,出现“挂起”的现象。 在这种情况下,Web 浏览器会建议终
阅读全文
摘要:有时我们只需要为一个模式找到那些在另一个模式之后或之前的匹配项。 有一种特殊的语法,称为“前瞻断言(lookahead)”和“后瞻断言(lookbehind)”。 首先,让我们从字符串中查找价格,例如 1 turkey costs 30€。即:一个数字,后跟€符号。 前瞻断言 语法为:x(?=y),
阅读全文
摘要:选择是正则表达式中的一个术语,实际上是一个简单的“或”。 在正则表达式中,它用竖线 | 表示。 例如,我们想要找出编程语言:HTML、PHP、Java 或 JavaScript。 对应的正则表达式为:html|php|java(script)?。 用例如下: let regexp = /html|p
阅读全文
摘要:我们不仅可以在结果或替换字符串中使用捕获组 (...) 的内容,还可以在模式本身中使用它们。 按编号反向引用:\N 可以使用 \N 在模式中引用一个组,其中 N 是组号。 为了弄清这有什么用,让我们考虑一个任务。 我们需要找到带引号的字符串:单引号 '...' 或双引号 "..." —— 应匹配这两
阅读全文
摘要:模式的一部分可以用括号括起来 (...)。这被称为“捕获组(capturing group)”。 这有两个影响: 它允许将匹配的一部分作为结果数组中的单独项。 如果我们将量词放在括号后,则它将括号视为一个整体。 示例 让我们看看在示例中的括号是如何工作的。 示例:gogogo 不带括号,模式 go+
阅读全文
摘要:量词乍一看非常简单,但实际上它们可能很棘手。 如果我们打算寻找比 /\d+/ 更复杂的东西,就需要理解搜索的工作原理。 以接下来的任务为例。 有一个文本,我们需要用书名号:«...» 来代替所有的引号 "..."。在许多国家,书名号是排版的首选。 例如:"Hello, world" 应该变成 «He
阅读全文
摘要:假设我们有一个像这样 +7(903)-123-45-67 的字符串,并想要找到其中所有数字。但与之前不同的是,我们对单个数字不感兴趣,只对全数感兴趣:7, 903, 123, 45, 67。 数字是一个或多个数字 \d 的序列。为了标记我们需要的数量,我们需要加一个 量词。 数量 {n} 最简单的量
阅读全文
摘要:在方括号 […] 中的几个字符或者字符类表示“搜索给定字符中的任意一个”。 集合 例如,[eao] 表示以下 3 个字符中的任何一个:'a'、'e' 或 'o' 。 这就是所谓的 集合。在正则表达式中,可以将集合和常规字符一起使用。 // 查找 [t 或 m],然后匹配 "op" alert( "M
阅读全文
摘要:正如我们所看到的,反斜杠 \ 用于表示字符类,例如 \d。所以它是正则表达式中的一个特殊字符(就像在常规字符串中一样)。 还存在其它特殊字符,这些字符在正则表达式中有特殊的含义,例如 [ ] { } ( ) \ ^ $ . | ? * +。它们用于执行更强大的搜索。 现在并不需要尝试记住它们 ——
阅读全文
摘要:词边界 \b 是一种检查,就像 ^ 和 $ 一样。 当正则表达式引擎(实现正则表达式搜索的程序模块)遇到 \b 时,它会检查字符串中的位置是否是词边界。 有三种不同的位置可作为词边界: 在字符串开头,如果第一个字符是单词字符 \w。 在字符串中的两个字符之间,其中一个是单词字符 \w,另一个不是。
阅读全文
摘要:多行模式由修饰符 m 启用。 它只影响 ^ 和 $ 的行为。 在多行模式下,它们不仅仅匹配文本的开始与末尾,还匹配每一行的开始与末尾。 搜索行的开头 ^ 在这个有多行文本的例子中,模式 /^\d/gm 将从每行的开头取一个数字: let str = `1st place: Winnie 2nd pl
阅读全文
摘要:插入符号 ^ 和美元符号
在正则表达式中具有特殊的含义。它们被称为“锚点”。插入符号匹配文本开头,而美元符号 则匹配文本末尾。 举个例子,让我们测试一下文本是否以 Mary 开头: let str1 = "Mary had a little lamb"; alert( /^Mary/
阅读全文
摘要:JavaScript 对字符串使用 Unicode 编码。大多数字符使用 2 个字节编码,但这种方式只能编码最多 65536 个字符。 这个范围不足以对所有可能的字符进行编码,这就是为什么使用 4 个字节对一些罕见的字符进行编码,比如 𝒳(数学符号 X)或 😄(笑脸),一些象形文字等等。 下面是
阅读全文
摘要:考虑一个实际的任务 —— 我们有一个电话号码,例如 "+7(903)-123-45-67",我们需要将其转换为纯数字:79031234567。 为此,我们可以查找并删除所有非数字的内容。字符类可以帮助我们实现它。 字符类(Character classes) 是一种特殊的符号,匹配特定集合中的任何符
阅读全文
摘要:正则表达式是提供了一种在文本中进行搜索和替换的强大的方式的模式。 在 JavaScript 中,我们可以通过 RegExp 对象使用它们,也可以与字符串方法结合使用。 正则表达式 正则表达式(可叫作 “regexp”,或 “reg”)包扩 模式 和可选的 修饰符。 有两种创建正则表达式对象的语法。
阅读全文