当前位置: 首页 > article >正文

JS宏进阶:正则表达式的使用

正则表达式,对于任何一门编程语言来说,都是一种非常强大的工具,主要用于搜索、编辑或操作文本和数据。因此,在JS中,也存在相应的对象new RegExp( ),在本章中,将详细介绍正则表达式在JS宏中的运用。

一、正则表达式的创建

在基础篇章中,曾提及正则表达式对象,在JS中有两种创建方法,示例如下:

// 字面量语法

const regex1 = /abc/;

// RegExp 构造函数

const regex2 = new RegExp('abc');

此外,在js中创建正则表达式时,还存在响应的修饰符。如下所示:

符号含义
i忽略大小写(ignoreCase)。
g全局搜索(global)。
m多行匹配(multiline)。
uUnicode 模式(Unicode),ES6 新增,用于正确处理 Unicode 字符。
y粘连模式(sticky),ES6 新增,确保匹配从目标字符串的当前位置开始。
sdotAll 模式,ES2018 新增,使 . 匹配包括换行符在内的所有字符。

因此,在JS中,正则表达式的完整创建语法为:

字面量创建语法:let reg = /正则匹配模式/修饰符号,示例如下

const regexp = /[0-9]+/g  //全局搜索

构造函数创建语法:let reg = new RegExp("正则匹配模式", "修饰符"),示例如下

let reg = new RegExp("[0-9]+", "g") //全局搜索

注意:对于两种创建方法来说,修饰符都是可选的。另外,如果使用new RegExp构造函数来创建正则表达式对象,要匹配 \ 本身,要写成:\\\\,这是因为,他的参数是字符串,在字符串中 \ 是需要转义的,所以,前面两个 \\ 相当于正则表达式中的元字符 \ , 后面的两个 \\ 相当于被元字符 \ 转义的 \ ,连在一起就表示匹配 \ 本身。依次类推:元字符 \d ,需写成 \\d ; \w ,需写成 \\w 等。

二、正则表达式对象中的方法

1、test方法

用于测试一个字符串是否匹配某个模式,返回布尔值。

const regex = new RegExp("hello");
console.log(regex.test("hello world")); // true
console.log(regex.test("world")); // false

上述示例中,用于测试的字符串"hello world"中符合正则匹配模式:hello,返回true。不符合的,就返回false。

2、exec方法

用于在字符串中执行搜索匹配。匹配成功返回一个数组,否则返回 null 。返回的数组包含匹配的结果以及捕获组(如果有的话)。

const regex = new RegExp("(hello) (world)");
const result = regex.exec("hello world");
if (result) {
  console.log(result[0]); // "hello world"
  console.log(result[1]); // "hello"
  console.log(result[2]); // "world"
}

另外,返回的数组包含一些额外的属性,如下图所示:

三、字符串对象String中的正则表达式

在基础篇章中,我们已经了解了字符串对象中的一些常用方法。比如,用于查找某一特定字符索引的serch,字符串替换的replace等等。在这些方法中,我们也可以将正则表达式作为他的参数,这样就可以查找、替换、匹配符合某一特定模式的字符串。

1、字符串方法match

使用正则表达式模式在字符串中查找匹配项。语法如下:

str.match(regexp);

str:是要搜索的字符串对象

regexp:是正则表达式对象

返回值与注意点如下所示:

如果 regexp 没有全局标志 g,则返回一个数组,包含第一个匹配项及其捕获组(如果有的话),以及两个附加属性:index(匹配项在字符串中的位置)和input (被搜索的字符串)。

如果 regexp 有全局标志 g,则返回一个包含所有匹配项的数组,没有捕获组信息。

如果没有匹配项,则返回 null 。

使用实例

const str = "abs12ysjhi892jha98wehj29ashx982y3huiahs89829hiuas8d9902hsd8a9";

// 查找第一个匹配项
const match1 = str.match(/\d+/);
console.log(JSON.stringify(match1)); // ["12"]
	
// 查找所有匹配项
const match2 = str.match(/\d+/g); //使用全局搜索,查找所有匹配项
console.log(JSON.stringify(match2)); // ["12","892","98","29","982","3","89829","8","9902","8","9"]

执行效果如下图所示

2、字符串方法matchAll

返回一个包含所有匹配正则表达式及其分组捕获的迭代器。语法如下:

str.matchAll(regexp);

str:是要搜索的字符串对象

regexp:是正则表达式对象

返回值是一个迭代器,每个迭代项是一个包含匹配项及其捕获组的数组。

使用实例:

const str = "test1test2";
const regex = /t(e)(st(\d?))/g;

const matches = str.matchAll(regex);
for (const match of matches) {
  console.log(match.join(",") + " index: " + match.index + " input:" + match.input + " " + typeof match.groups);
}

// 输出:
// ["test1", "e", "st1", "1", index: 0, input: "test1test2", groups: undefined]
// ["test2", "e", "st2", "2", index: 5, input: "test1test2", groups: undefined]

执行效果图如下所示:

3、字符串方法replace

使用正则表达式模式在字符串中查找匹配项,并替换与此模式匹配的子串。语法如下

str.replace(regexp|substr, newSubStr|function);

str:是要搜索的字符串对象

regexp|substr:是正则表达式对象 | 等待替换的字符串

newSubStr|function:用于替换匹配项的新字符串 | 一个返回替换字符串的函数

返回一个新字符串,其中匹配项被替换为新的字符串或函数返回值。

使用实例如下所示:

const str = "Hello World!";

// 替换匹配项
const newStr1 = str.replace(/world/i, "JavaScript");
console.log(newStr1); // "Hello JavaScript!"

// 使用函数进行替换
const newStr2 = str.replace(/(\w+)\s(\w+)/, (match, p1, p2) => {
  return `${p2}, ${p1}!`;
});
console.log(newStr2); // "World, Hello!"

效果图如下所示:

4、字符串方法search

执行正则表达式和字符串之间的搜索匹配,返回匹配项的索引,或者如果没有匹配项,则返回 -1。语法如下

str.search(regexp);

str:是要搜索的字符串对象

regexp:是正则表达式对象

使用实例:

const str = "Hello World!";

// 查找匹配项的索引
const index = str.search(/world/i);
console.log(index); // 6

5、字符串方法split

使用正则表达式模式在字符串中查找匹配项,并分割字符串。语法如下

str.split(regexp|substr, limit);

str:是要搜索的字符串对象

regexp|substr:要分割的子串(非正则表达式模式)

limit ( 可选 ):一个整数,限制返回的数组长度。

返回值是一个数组,包含被分割后的子串。

使用实例:

const str = "Hello World,   Hello   JavaScript";
	
// 使用正则表达式分割字符串
const parts = str.split(/\s+/);
console.log(JSON.stringify(parts)); // ["Hello","World,","Hello","JavaScript"]
	
// 限制返回数组的长度
const parts2 = str.split(/\s+/, 2);
console.log(JSON.stringify(parts2)); // ["Hello","World,"]

效果图如下所示:

四、总结

new RegExp( ) 提供了一种动态创建正则表达式的方法,而正则表达式对象的方法(如 test和 exec)以及字符串对象的方法(如 match、replace等)则提供了丰富的操作手段来处理和匹配字符串。理解这些方法和标志,可以大大提高你在 JavaScript 中处理字符串的效率和能力。


http://www.kler.cn/a/511017.html

相关文章:

  • 第3章:Python TDD更新测试用例测试Dollar类
  • 多元线性回归分析
  • nuiapp在APP中的.nvue页面中使用webview展示空白的问题
  • 从 0 开始实现一个 SpringBoot + Vue 项目
  • Go入门学习笔记
  • 如何保证光谱相机的稳定性和可靠性
  • windows蓝牙驱动开发-BLE音频(二)
  • ROS2 与机器人视觉入门教程(ROS2 OpenCV)
  • 高通8255 Android STR 启动失败要因分析调查
  • Linux 常用命令——文件目录篇(保姆级说明)
  • MySQL中的GROUP_CONCAT函数将分组后的多个行值合并成一个字符串,并用指定分隔符连接
  • 《论文阅读》通过思维链微调产生原因感知的同理心反应 2024
  • 规避路由冲突
  • 【Vim Masterclass 笔记21】S09L39:Vim 设置与 vimrc 文件的用法示例(二)
  • AI守护煤矿安全生产:基于视频智能的煤矿管理系统架构解析
  • Python在DevOps中的应用:自动化CI/CD管道的实现
  • 从C到C++:嵌入式开发中两者的差异与过渡技巧
  • C# 声明废弃特性
  • 使用 Go 语言生成样式美观的 PDF 文件
  • LeetCode - #187 Swift 实现重复的DNA序列
  • 事务处理系统 (Transaction Processing System, TPS)
  • TCP报文格式与核心机制
  • Pycharm报错:libpng warning: iCCP: known incorrect sRGB profile
  • [手机Linux] 七,NextCloud优化设置
  • 生成模型:生成对抗网络-GAN
  • 数据库高可用方案-07-一致性校验