JS正则基础使用
JavaScript 正则表达式
正则表达式是一种强大的文本处理工具,可以用来匹配、查找和替换指定的文本模式。在 JavaScript 中,正则表达式是一种特殊类型的对象,也支持使用正则表达式字面量或者 RegExp 构造函数来创建和使用正则表达式。
正则表达式的基本语法
创建正则表达式
在 JavaScript 中,可以使用两种方式来创建正则表达式:
- 字面量形式:使用
/开始和结束,例如/pattern/flags; - 构造函数形式:使用
new RegExp(pattern, flags),其中pattern是正则表达式模式字符串,flags是可选的标志字符串。
举个例子,下面是一个匹配数字的简单正则表达式:
1 | // 使用字面量形式创建正则表达式 |
需要注意的是,使用正则表达式时,反斜杠 \ 是一个特殊字符,表示转义。因此,在字面量形式中,如果希望匹配反斜杠本身,需要使用双反斜杠 \\ 表示;而在构造函数形式中,则需要使用四个反斜杠 \\\\ 表示。
匹配模式和元字符
正则表达式由基本字符和元字符组成。其中,基本字符表示普通字符,而元字符则具有特殊含义。
以下是一些常见的元字符:
.:点代表匹配除了换行符\n、\r、\v、\f之外的任何单个字符。^:脱字符号表示匹配输入的开始在多行模式中匹配每一行的开始。$:美元符号表示匹配输入的结尾在多行模式中匹配每一行的结尾。*:星号表示匹配前面的子表达式零次或多次,即允许出现零次。+:加号表示匹配前面的子表达式一次或多次。?:问号表示匹配前面的子表达式零次或一次,即允许出现零次或一次。|:管道符号代表“或”的意思,多个子表达式通过|连接的时候可以选择其中任意一个匹配对象。[]:方括号中间放任意字符,表示匹配方括号中的任一字符,并且只能匹配一个。():小括号中间是正则表达式,表示匹配括号内的整个正则表达式,也可以用于分组。\d:表示数字字符。等价于[0-9]。\D:表示非数字字符。等价于[^0-9]。\w:表示任何字母数字字符,包括下划线。等价于[A-Za-z0-9_]。\W:表示非单词字符,包括符号和空格等。等价于[^A-Za-z0-9_]。\s:表示空白字符,包括空格、制表符和换行符等。等价于[\f\n\r\t\v]\S:表示非空白字符。等价于[^\f\n\r\t\v]。
以下是一些使用正则表达式的示例:
1 | var patt1 = /hello/g; |
匹配标志
正则表达式的匹配标志可以改变正则表达式的行为,例如:
i表示忽略大小写;g表示全局匹配模式,匹配到第一个结果之后继续查找;m表示多行匹配模式,使得^和$符号可以分别匹配文本的开头和结尾,而非仅匹配整个字符串的开头和结尾。
以下是使用匹配标志的示例,其中 /g 标志用来查找所有数字:
1 | const text = "The quick brown fox jumps over the lazy dog 123 times!"; |
结果输出如下:
1 | Match found at position 39: "123" |
特殊字符和转义符
有些特殊的字符在正则表达式中有特别的含义,它们被称为元字符,如果需要匹配这些字符本身,则需要使用转义符 \。一些常用的特殊字符包括:
(、)、[、]、.、*、+、^、$、{、}:表示某些特定功能的字符,需要在前面加上转义符才能匹配这些字符本身。\:作为转义符,可以将特殊字符转义成字面量。
例如,如果想要匹配文本中的一个点号,应该使用转义符 \.;如果想要匹配括号中的内容,应该使用小括号(即 ( 和 ))将要匹配的部分圈起来,并在最前面加上反斜杠 (即 \( 和 \)):
1 | var pattern = /\d+\.\d+/g; |
正则表达式的高级用法
分组和引用
在正则表达式中,可以使用圆括号 ( ) 来进行模式分组,并且使用数字或名称来引用已匹配的子串。以下是一个示例:
1 | const zipCodeRegex = /^(\d{5})(?:[ -](\d{4}))?$/; |
在上面的示例中,使用正则表达式匹配邮编,并将邮政编码的前 5 位和后 4 位分别放置于第一组和第二组中。其中 \d{5} 表示匹配 5 个数字字符,而 (?:[ -](\d{4}))? 则表示匹配可选的后 4 位数字或空格(其中 (?:...) 表示非捕获分组,即只匹配但不作为结果输出)。
替换和函数回调
在 JavaScript 中,可以使用 String.prototype.replace() 方法来进行正则表达式替换。通常情况下,字符串替换的语法如下:
1 | const result = inputString.replace(regex, replacementString); |
其中 regex 是正则表达式模式,replacementString 是用来替换匹配到的子串的字符串。以下是一个简单的示例:
1 | const jsonString = '{"name": "John Doe", "age": 35}'; |
上面的示例中,使用 JSON.stringify() 将一个 JSON 对象转化为字符串,然后使用正则表达式将所有双引号替换为单引号。
除了直接指定替换字符串之外,replace()
结论
正则表达式是一个强大的工具,尤其是在文本处理和编写复杂搜索算法时特别有用。本文只介绍了 JS 正则表达式语法规则、常用方法、修饰符和集合,并提供了一些示例代码。如果想要更深入学习,可以参考 MDN 文档 或其他相关教程。 —>
