📜  正则表达式 char 或 char - Javascript (1)

📅  最后修改于: 2023-12-03 15:40:38.253000             🧑  作者: Mango

正则表达式 char 或 char - Javascript

正则表达式是处理文本的强大工具,可以通过使用简单的字符、特殊字符和模式来匹配、搜索、替换、分割等等。其中,字符 char 或者 char 表示精确匹配一个字符。

匹配单个字符

正则表达式中的 .(点号)匹配单个任意字符。比如,使用正则表达式 /.at/ 将匹配 "cat"、"bat"、"rat" 等。而使用正则表达式 /s.t/ 则会匹配 "sat"、“set”等。

在正则表达式中使用 char 可以匹配该字符,例如 /c/ 将匹配 "cat" 中的 "c"。若要匹配所有 c,可以使用 /c+/。它将匹配连续的所有 "c"。

下面是一些常见的字符匹配和它们的含义:

| 字符 | 含义 | |-------|----------------------------------------------------------------------------------------------------------------| | . | 匹配除回车符和换行符之外的任何单个字符 | | \w | 匹配任何单个字母数字字符或下划线 | | \W | 匹配任何非单词字符,如标点符号或空格 | | \d | 匹配任何单个数字字符 | | \D | 匹配任何非数字字符 | | \s | 匹配任何单个空格字符、制表符或换行符 | | \S | 匹配任何非空白字符 | | [abc] | 匹配 a、b 或 c 中的任何一个字符 | | [^abc]| 匹配除了 a、b、c 以外的任何字符 | | [a-z] | 匹配任何小写字母字符 | | [A-Z] | 匹配任何大写字母字符 | | [0-9] | 匹配任何数字字符 | | ^ | 匹配输入字符串的开始 | | $ | 匹配输入字符串的结尾 |

匹配固定数量的字符

如果想要匹配一定数量的固定字符,可以使用大括号表示数量。下面是一些例子:

| 正则表达式 | 含义 | |------------|------------------------------------------------------------------------------------------------| | a{3} | 匹配 3 个连续的 "a" 字符 | | a{3,} | 匹配 3 个或以上连续的 "a" 字符 | | a{3,6} | 匹配 3-6 个连续的 "a" 字符 | | a* | 匹配 0 或更多个连续的 "a" 字符(等价于 {0,}) | | a+ | 匹配 1 或更多个连续的 "a" 字符(等价于 {1,}) | | a? | 匹配 0 或 1 个连续的 "a" 字符(等价于 {0,1}) | | a{3}a{3} | 匹配 3 个 "a" 字符,然后再匹配 3 个 "a" 字符 |

概括字符集

有时候我们需要匹配一类字符,例如数字、字母、空格等等。这时,可以使用概括字符集。下面是一些常见的概括字符集和它们的含义:

| 字符 | 含义 | |-------|------------------------------------------------------------------------------------------------| | \d | 匹配任何单个数字字符 | | \D | 匹配任何非数字字符 | | \w | 匹配任何单个字母数字字符或下划线 | | \W | 匹配任何非单词字符,如标点符号或空格 | | \s | 匹配任何单个空格字符、制表符或换行符 | | \S | 匹配任何非空白字符 |

例如,正则表达式 /\d+/ 将匹配任何一个数字字符串。

使用括号子表达式

使用括号子表达式可以创建更复杂的匹配模式。括号中的内容可以被再次分组,并且可以使用特殊字符,如选项、限定符等等。例如,正则表达式 /([a-z]+)\s([a-z]+)/ 将匹配任何两个由空格分隔的连续小写字母单词。

下面是一些常见的括号子表达式和它们的含义:

| 子表达式 | 含义 | |----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | (abc) | 匹配正好 abc 字符串。 | | a(bc) | 匹配 a 和 bc 组成的字符串。注意:abc 和 a(bc) 并不匹配同一个字符串。 | | (abc)def | 匹配 abc 和 def 组成的字符串。注意:abc 和 (abc)def 并不匹配同一个字符串。 | | (abc|def)| 匹配 "abc" 或 "def" 的字符串。 | | (ab(cd)?|ef) | 匹配 "ab" 后跟 "cd"(可选),或跟 "ef" 的字符串。例如,"abef"、"abcd"、"ab" 均匹配。 |

量词和贪婪性

正则表达式中的量词控制可以匹配多少个相同的字符或字表达式等。常见量词和它们的含义如下:

| 量词 | 含义 | |------|--------------------------------------------------------------------------------| | * | 重复 0 次或更多次 | | + | 重复 1 次或更多次 | | ? | 重复 0 次或 1 次 | | {n} | 重复 n 次 | | {n,} | 重复 n 次或更多次 | | {n,m}| 重复 n 次到 m 次之间 |

量词默认是贪婪模式的,它们会尽可能多地匹配字符。例如,正则表达式 /(a+)b/ 将匹配连续的 a 字符,直到最后一个 a 字符出现之后的 b 字符。如果出现多个字符串,那么匹配回合在一起的字符,例如 "aaaaab",将匹配整个字符串 "aaaaab"。

限定符可以使量词变成非贪婪模式,它们会尽可能少地匹配字符。将量词后面加上 ? 就可以启用非贪婪模式。例如,/(a+?)b/ 将匹配一个或多个连续 "a" 字符,直到最后一个 a 字符出现之后的 b 字符。如果出现多个字符串,那么匹配第一个 a 字符和 b 字符之间的字符,例如 "aaaaab",将匹配第一个 "a" 和 "b" 之间的字符 "a"。

匹配字符集范围

正则表达式中,中括号可以表示匹配某个范围内的所有字符。例如,/[a-z]/ 将匹配所有小写字母。字符范围可以自定义,例如 /[a-zA-Z]/ 将匹配所有大小写字母。

环视

环视可以让匹配某个字符的时候,检查该字符是否满足前置或后置条件。环视通常在匹配 IP 地址的时候经常用到。下面是几个常见的环视:

| 环视 | 含义 | |---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| | (?=foo) | 匹配后继字符是 foo 的字符,但不匹配后继字符。 | | (?<=foo)| 匹配前导字符是 foo 的字符,但不匹配前导字符。 | | (?!foo) | 匹配一个后继字符不是 foo 的字符,但不匹配后继字符。如匹配 "apple" 但不匹配 "apples"。 | | (?<!foo)| 匹配一个前导字符不是 foo 的字符,但不匹配前导字符。如匹配 "banana" 但不匹配 "foobanana"。|

环视可以与其他正则表达式组合使用,例如,在检查邮箱地址的时候,可以用 /@\w+(?=.com)/ 检查邮箱是否以 .com 结尾。

反向引用

正则表达式中,反向引用表示引用括号表达式中比赛的内容。例如,在匹配 HTML 标签的时候,可以使用以下表达式:

/<(\w+)>(.+)<\/\1>/

这个正则表达式会匹配开始标签和结束标签之间的所有内容,并确保开头和结尾的标签是相同的。

总结

正则表达式中的字符匹配非常强大,它们可以帮助开发者快速、准确地查找、替换、分割和匹配文本。本文介绍了常见的字符匹配模式、量词和环视及其他技术。无论您是新手还是有经验的开发者,都可以使用正则表达式来提高您的工作效率和准确性。