玩命加载中 . . .

JavaScript的正则表达式


正则表达式是一个很强大的工具,在Python中被广泛使用,一般我在Python中也用的多一点,最近在JavaScript编程中也经常遇见,这里做一下简单的记录。

JavaScript正则表达式简介

与Python中的正则表达式类似,JavaScript的正则表达式中,关键有两部分

  • 匹配模式串
    • 元字符
    • 匹配标志
  • 匹配方法(正则方法)

元字符

匹配模式串的核心部分。

元字符 描述
. 查找单个字符,除了换行和行结束符
\w 查找单词字符
\W 查找非单词字符
\d 查找数字
\D 查找非数字字符
\s 查找空白字符
\S 查找非空白字符
\b 匹配单词边界
\B 匹配非单词边界
\0 查找 NUL字符
\n 查找换行符
\f 查找换页符
\r 查找回车符
\t 查找制表符
\v 查找垂直制表符
\xxx 查找以八进制数 xxxx 规定的字符
\xdd 查找以十六进制数 dd 规定的字符
\uxxxx 查找以十六进制 xxxx规定的 Unicode 字符

特殊字符

字符 描述

量词

指定了重复匹配字符的确数或者约数。下面展示一些量词搭配元字符的使用:

量词 描述
n+ 匹配任何包含至少一个 n 的字符串
n* 匹配任何包含零个或多个 n 的字符串
n? 匹配任何包含零个或一个 n 的字符串
n{x} 匹配包含 x 个 n 的序列的字符串
n{x,y} 匹配包含最少 x 个、最多 y 个 n 的序列的字符串
n{x,} 匹配包含至少 x 个 n 的序列的字符串

n可以是前面的元字符。

匹配标志

在默认情况下,正则的匹配最多只会匹配到一个结果。但是可以在正则匹配模式串后面添加标记:

  • /g 表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。
  • /i 表示匹配的时候不区分大小写。
  • /m 表示多行匹配——匹配换行符两端的潜在匹配。影响正则中的^$符号。

正则方法

方法 描述
exec 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回 null)。
test 一个在字符串中测试是否匹配的RegExp方法,它返回 true 或 false。
match 一个在字符串中执行查找匹配的String方法,它返回一个数组,在未匹配到时会返回 null。
matchAll 一个在字符串中执行查找所有匹配的String方法,它返回一个迭代器(iterator)。
search 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
replace 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
split 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 方法。
  • test方法仅仅返回一个布尔值,表示是否匹配成功;
  • exec方法会返回关于匹配结果的详情,一般包括:
    1. 匹配的全部字符串
    2. 匹配模式串中括号的分组捕获
    3. index:匹配到的字符位于原始字符串中的索引值(基于0)
    4. input:原始字符串
  • match方法也会返回一个比较详细的匹配结果。

插入语

插入语即在模式串中使用括号,将希望被记忆的片段保存下来,以便后续程序中使用。

比如这个模式串const reStr = /.*-q\s*(.*)-p\s*(.*)/,用于匹配的栗子如下:


输入命令吧?company_query -q 3 -p Static Department, 3000
输入为 company_query -q 3 -p Static Department, 3000
[
  'company_query -q 3 -p Static Department, 3000',
  '3 ',
  'Static Department, 3000',
  index: 0,
  input: 'company_query -q 3 -p Static Department, 3000',
  groups: undefined
]

文章作者: 鹿卿
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 鹿卿 !
评论
  目录