JavaScript 正则表达式基础与实战指南
本文系统介绍JavaScript中正则表达式(RegExp)的用法,涵盖基本语法、常用元字符(如+、*、?、\d等)、限定符、定位符及优先级规则。通过具体代码示例演示如何创建正则对象、使用test和match方法验证邮箱或提取文本,帮助开发者掌握模式匹配与替换的核心技巧。
正则表达式概述
正则表达式使用详解
简介
简而言之,正则表达式是一种功能强大的工具,主要用于模式匹配和文本替换。其核心作用包括三个方面:首先,用于测试字符串是否符合特定模式,例如验证输入字符串中是否存在电话号码或信用卡号,这常用于数据有效性校验;其次,用于替换文本,通过正则表达式定位特定文字后,可将其删除或替换为其他内容;最后,用于从字符串中提取子字符串,以便在文本或输入字段中查找特定内容。
基本语法与元字符
基本语法
在了解正则表达式的基本功能后,接下来具体探讨其语法格式。
正则表达式的通用形式通常如下所示:
/love/。其中,位于“/”定界符之间的部分即为要在目标对象中进行匹配的模式。用户只需将希望查找的模式内容放入“/”定界符之间即可。为了更灵活地定制模式,正则表达式提供了专门的“元字符”。元字符是指在正则表达式中具有特殊意义的专用字符,用于规定其前导字符(即元字符前面的字符)在目标对象中的出现模式。常用的元字符包括“+”、“*”和“?”。“+”规定其前导字符必须在目标对象中连续出现一次或多次;“*”规定其前导字符必须出现零次或连续多次;“?”规定其前导对象必须连续出现零次或一次。
下面通过具体应用示例来展示正则表达式元字符的使用方法。
/fo+/。由于该正则表达式包含“+”元字符,它可以与目标对象中字母f后连续出现一个或多个字母o的字符串匹配,例如“fool”、“fo”或“football”。/eg*/。该表达式包含“*”元字符,可与字母e后连续出现零个或多个字母g的字符串匹配,例如“easy”、“ego”或“egg”。/Wil?/。该表达式包含“?”元字符,可与字母i后连续出现零个或一个字母l的字符串匹配,例如“Win”或“Wilson”。
限定符与特殊元字符
有时我们不确定需要匹配多少字符。为了适应这种不确定性,正则表达式支持限定符的概念。限定符可以指定正则表达式的给定组件必须出现多少次才能满足匹配条件。
{n},其中n为非负整数,表示匹配确定的n次。例如,“'o{2}'”不能匹配“Bob”中的“o”,但能匹配“food”中的两个“o”。{n,},其中n为非负整数,表示至少匹配n次。例如,“'o{2,}'”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有“o”。“'o{1,}'”等价于“'o+'”,而“'o{0,}'”等价于“'o*'”。{n,m},其中m和n均为非负整数且n <= m,表示最少匹配n次且最多匹配m次。例如,“"o{1,3}"”将匹配“fooooood”中的前三个“o”。“'o{0,1}'”等价于“'o?'”。请注意,逗号和两个数之间不能有空格。除了元字符外,用户还可以精确指定模式在匹配对象中出现的频率。例如,“/jim {2,6}/”规定字符“m”可以在匹配对象中连续出现2至6次,因此该表达式可与“jimmy”或“jimmmmmy”等字符串匹配。
了解基本用法后,我们来看其他几个重要的元字符:\s用于匹配单个空格符,包括tab键和换行符;\S用于匹配除单个空格符之外的所有字符;\d用于匹配从0到9的数字;\w用于匹配字母、数字或下划线字符;\W用于匹配所有与\w不匹配的字符;“.”用于匹配除换行符之外的所有字符。
(说明:我们可以把\s和\S以及\w和\W看作互为逆运算)
下面通过实例展示如何在正则表达式中使用上述元字符。
定位符与范围匹配
/\s+/。该正则表达式可用于匹配目标对象中的一个或多个空格字符。/\d000/。如果手中有一份复杂的财务报表,可以通过该正则表达式轻松查找所有总额达千元的款项。除了上述元字符,正则表达式中还有一种独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。常用定位符包括“^”、“$”、“\b”和“\B”。“^”规定匹配模式必须出现在目标字符串的开头;“$”规定匹配模式必须出现在目标对象的结尾;“\b”规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一;“\B”规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。同样,我们可以把“^”和“$”以及“\b”和“\B”看作互为逆运算的两组定位符。举例来说:/^hell/。由于该正则表达式包含“^”定位符,它可以与以“hell”、“hello”或“hellhound”开头的字符串匹配。/ar$/。由于该正则表达式包含“$”定位符,它可以与以“car”、“bar”或“ar”结尾的字符串匹配。/\bbom/。由于该模式以“\b”定位符开头,它可以与以“bomb”或“bom”开头的字符串匹配。/man\b/。由于该模式以“\b”定位符结尾,它可以与以“human”、“woman”或“man”结尾的字符串匹配。为了方便用户灵活设定匹配模式,正则表达式允许在匹配模式中指定某一范围而不局限于具体字符。例如:/[A-Z]/。该正则表达式将与从A到Z范围内任何一个大写字母匹配。/[a-z]/。该正则表达式将与从a到z范围内任何一个小写字母匹配。/[0-9]/。该正则表达式将与从0到9范围内任何数字匹配。/([a-z][A-Z][0-9])+/。该正则表达式将与任何由字母和数字组成的字符串(如“aB0”)匹配。
组合、逻辑与优先级
这里需要提醒用户注意的一点是,可以在正则表达式中使用“()”把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如“abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。如果希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配,可以使用管道符“|”。例如:/to|too|2/。该正则表达式将与目标对象中的“to”、“too”或“2”匹配。正则表达式中还有一个常用的运算符,即否定符“[^]”。与前文介绍的定位符“^”不同,否定符“[^]”规定目标对象中不能存在模式中所规定的字符串。例如:/[^A-C]/。该字符串将与目标对象中除A、B和C之外的任何字符匹配。一般来说,当“^”出现在“[]”内时被视为否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应被视为定位符。最后,当用户需要在正则表达式的模式中加入元字符并查找其匹配对象时,可以使用转义符“\”。例如:/Th\*/。该正则表达式将与目标对象中的“Th*”而非“The”等匹配。
在构造正则表达式后,就可以像数学表达式一样求值,即从左至右并按照一个优先级顺序来求值。优先级如下:
1. \ 转义符 2. (), (?:), (?=), [] 圆括号和方括号 3. *, +, ?, {n}, {n,}, {n,m} 限定符 4. ^, $, \anymetacharacter 位置和顺序 5. | “或”操作
JavaScript中的RegExp对象与实例
使用实例
在JavaScript 1.2中,带有一个功能强大的RegExp()对象,可用于进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应地返回true或false。我们可以使用JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。正则表达式对象:本对象包含正则表达式模式以及表明如何应用模式的标志。语法1:re = /pattern/[flags]。语法2:re = new RegExp("pattern",["flags"])。参数:re,必选项,将要赋值为正则表达式模式的变量名。Pattern,必选项,要使用的正则表达式模式。如果使用语法1,用“/”字符分隔模式。如果用语法2,用引号将模式引起来。Flags,可选项。如果使用语法2,要用引号将flag引起来。标志可以组合使用,可用的有:g(全文查找出现的所有pattern)、i(忽略大小写)、m(多行查找)。
示例
下面的示例创建一个包含正则表达式模式及相关标志的对象(re),向您演示正则表达式对象的用法。在本例中,作为结果的正则表达式对象又用于match方法中:
代码如下:
function MatchDemo()
{
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain";
re = new RegExp("ain","g"); // 创建正则表达式对象。
r = s.match(re); // 在字符串 s 中查找匹配。
return(r);
}如果看了上面的内容仍然感觉不过瘾的话,这里推荐大家看下正则表达式30分钟入门教程,更容易上手与学习。
D3.js 比例尺与坐标轴的配置详解
2026-11-05 16:54:46
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
