js 正则表达式提取字符串
正则表达式是一种强大的文本匹配工具,它可以用来在字符串中查找符合某种模式的子串。在 JavaScript 中,正则表达式可以通过 RegExp 对象实例化来使用。本文将介绍如何使用正则表达式来提取字符串中的子串。
基本语法
正则表达式是由一系列字符和特殊字符构成的字符串,用于匹配目标字符串中符合给定模式的子串。JavaScript 中可以通过两种方式定义正则表达式:
- 字面量方式:使用斜杠(/)将正则表达式包裹起来,此时可以添加一些修饰符(如 g、i、m 等)来控制匹配行为。
- 构造函数方式:使用 RegExp 构造函数来创建正则表达式对象,第一个参数为正则表达式字符串,第二个参数为修饰符字符串。
下面是一个使用字面量定义正则表达式的例子:
输出结果为 [“3”],表示在字符串 str 中找到了符合正则表达式的第一个子串,即数字 3。
常用修饰符
在正则表达式中,修饰符用于控制匹配行为,常用的修饰符包括:
- g:全局匹配,即查找所有符合模式的子串。
- i:忽略大小写匹配,即不区分大小写地查找子串。
- m:多行匹配,即允许匹配目标字符串中的多行文本。
在上面的例子中,如果我们希望提取字符串中所有的数字,可以在正则表达式最后添加修饰符 g:
输出结果为 [“3”] 和 [“1415926535”],表示在字符串 str 中找到了两个符合正则表达式的子串,分别为数字 3 和数字 1415926535。
捕获组
在正则表达式中,用小括号 ( ) 包裹子表达式表示一个捕获组,在匹配过程中,捕获组的内容会保存在 2、$3 等特殊变量中,从左到右依次编号。下面是一个例子:
输出结果为 [“2021年7月15日”, “2021”, “7”, “15”],表示在字符串 str 中找到了符合正则表达式的子串和三个捕获组,分别为 2021、7、15。由于使用了捕获组,因此可以通过特殊变量 2、$3 来获取捕获组中的内容。
非捕获组
在正则表达式中,用 (?: ) 包裹子表达式表示一个非捕获组,与捕获组不同的是,非捕获组不会生成特殊变量,即不能通过 2、$3 等方式获取其内容。非捕获组通常用于提高匹配效率或者排除不需要的内容。下面是一个例子:
输出结果为 [“example@example.com”, “example”, “com”],表示在字符串 str 中找到了符合正则表达式的子串和两个非捕获组,分别为 example 和 com。由于使用了非捕获组,因此不能通过特殊变量来获取其内容。
贪婪匹配与非贪婪匹配
在正则表达式中,默认为贪婪匹配,即匹配尽可能多的字符。如果希望匹配尽可能少的字符,则需要使用非贪婪匹配,即在匹配子表达式后添加问号(?)。下面是一个例子:
输出结果为 [“\”引号内的内容\””, “引号内的内容”] 和 [“\”另一个引号内的内容\””, “另一个引号内的内容”],表示在字符串 str 中找到了两个符合正则表达式的子串,分别为引号内的内容。
使用正则表达式进行替换
除了提取字符串中的子串外,正则表达式还可以用于进行字符串替换。在 JavaScript 中,可以使用 String 类型的 replace 方法来进行替换操作。replace 方法接受两个参数:第一个参数为正则表达式或者字符串,表示要进行替换的模式;第二个参数为替换后的内容。下面是一个例子:
输出结果为 “一二三四五六七八九零”,表示将字符串 str 中的数字用汉字替换。
结论
正则表达式是一种灵活、强大的文本匹配工具,在 JavaScript 中可以通过 RegExp 对象来实现。常用的正则表达式语法包括基本语法、常用修饰符、捕获组、非捕获组、贪婪匹配与非贪婪匹配等。除了提取字符串中的子串外,正则表达式还可以用于进行字符串替换等操作。学习和掌握正则表达式对于开发高效、精简的程序非常重要。