添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

[0-9A-F] 中有两个范围:它搜索一个字符,该字符要么是在 0 9 范围内的数字,要么是从 A F 的字母。

如果我们还想查找小写字母,则可以添加范围 a-f [0-9A-Fa-f] 。或添加标志 i

我们也可以在 […] 中使用字符类。

例如,如果我们想查找单词字符 \w 或连字符 - ,则集合可以写为 [\w-]

也可以组合多个类,例如 [\s\d] 表示“空格字符或数字”。

字符类是某些字符集合的简写
  • \d —— 和 [0-9] 相同,
  • \w —— 和 [a-zA-Z0-9_] 相同,
  • \s —— 和 [\t\n\v\f\r ] 外加少量罕见的 Unicode 空格字符相同。
  • 示例:多语言 \w

    由于字符类 \w 是简写的 [a-zA-Z0-9_] ,因此无法找到中文象形文字,西里尔字母等。

    我们可以编写一个更通用的模式,该模式可以查找任何语言中的单词字符。借助 Unicode 属性很容易实现: [\p{Alpha}\p{M}\p{Nd}\p{Pc}\p{Join_C}]

    让我们理解一下。类似于 \w ,我们正在制作一组属于我们自己的包含具有以下 Unicode 属性的字符:

  • Alphabetic ( Alpha ) —— 字母,
  • Mark ( M ) —— 音调,
  • Decimal_Number ( Nd ) —— 数字,
  • Connector_Punctuation ( Pc ) —— 下划线 '_' 和类似的字符,
  • Join_Control ( Join_C ) —— 两个特殊代码 200c 200d ,用于连字,例如阿拉伯语。
  • 使用示例:

    当然,我们可以编辑这个模式:添加 Unicode 属性或删除它们。 Unicode:修饰符 "u" 和类 \p{...} 一文更详细地介绍了 Unicode 属性。

    IE 浏览器不支持 Unicode 属性

    IE 浏览器未实现 Unicode 属性 p{...} 。如果我们真的需要它们,可以使用库 XRegExp

    或者只是使用我们感兴趣的语言中的字符范围,例如西里尔字母范围 [а-я]

    排除范围

    除了普通的范围匹配,还有像这样 [^…] 的“排除”范围匹配。

    通过在开头添加插入符号 ^ 来表示匹配所有 除了给定的字符 之外的任意字符。

  • [^aeyo] —— 匹配除了 'a' 'e' 'y' 'o' 之外的任何字符。
  • [^0-9] —— 匹配除了数字之外的任何字符,与 \D 作用相同。
  • [^\s] —— 匹配任何非空格字符,与 \S 作用相同。
  • 下面的示例搜索除了字母、数字和空格之外的任何字符:

    […] 中的转义

    通常当我们想要准确地找到一个特殊字符时,我们需要像 \. 这样对其进行转义。如果我们需要反斜杠,那么我们需要使用 \\ ,等等。

    在方括号,我们可以使用绝大多数特殊字符而无需转义:

  • 符号 . + ( ) 无需转义。
  • 在开头或结尾(未定义范围)的连字符 - 不会被转义。
  • 插入符号 ^ 仅在开头会被转义(表示排除)。
  • 右方括号 ] 总是会被转义(如果我们需要寻找那个符号)。
  • 换句话说,除了在方括号中有特殊含义的字符外,其它所有特殊字符都是允许不转义的。

    方括号中的点 . 表示的就是一个点。模式 [.,] 将会搜索字符之一:点或逗号。

    在下面的示例中,正则表达式 [-().^+] 查找 -().^+ 中的任何字符:

    for(let i=0; i<'𝒳𝒴'.length; i++) {
      alert('𝒳𝒴'.charCodeAt(i)); // 55349, 56499, 55349, 56500
          

    因此,上面的示例查找并显示了 𝒳 的左半部分。

    如果我们添加了修饰符 u,那么行为就正常了:

    因为,没有修饰符 u 时,代理对将被视为两个字符,所以 [𝒳-𝒴] 被理解为 [<55349><56499>-<55349><56500>](每个代理对都替换为其代码)。现在很容易看出范围 56499-55349 是无效的:其起始代码 56499 大于终止代码 55349。这就是错误的原因。

    带有修饰符 u 时,该模式就可以正常匹配了: