如何正确使用正则表达式匹配双引号?此文教会你!

848 阅读8分钟

哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  有个问题,不知道大家是否也有过这样的一个瞬间:一段代码文本里带一堆带双引号,看得头都大,无论是提取 JSON 数据、解析字符串,还是处理 HTML 属性,看着这些双引号,人都麻了。但是,我现在是不麻了,因为我掌握了一种很便捷的方式,那就是---正则表达式,运用正则匹配双引号那简直就是轻而易举!压根不费吹灰之力,不信你自己试试。

  今天,我就来分享一下,一起带你从零开始学习如何用正则表达式处理双引号相关的问题,助你快速掌握使用正则,真正做到知其然,更知其所以然!🚀 OK,那我们开始了。

目录

  1. 为什么要用正则表达式匹配双引号?
  2. 正则基础知识复习
  3. 常用正则匹配双引号的例子
    • 匹配双引号内的内容
    • 匹配包含双引号的整个字符串
    • 匹配嵌套双引号的复杂场景
  4. 实战案例:用正则提取 JSON 字符串中的双引号内容
  5. 延伸:如何优化和避免常见正则陷阱
  6. 小结

为什么要用正则表达式匹配双引号?

在前端开发中,我们经常会遇到有需要处理文本数据,而双引号是非常常见的字符,比如:

  • JSON 数据:
  { "name": "Alice", "age": 25 }

想提取键值对时,双引号不可避免。

  • HTML 属性:
  <input type="text" value="Hello World" />

如果你想获取 value 的值,就得匹配双引号里的内容。

  • 普通文本:
  "Hello, World!" 这是一段经典文本。

提取这段话时,也要用到双引号匹配。

简而言之,双引号的处理几乎无处不在,而正则表达式就是对症它们的良药,一招秒杀。

正则基础知识复习

在进入正题之前,我们先来复习一些正则的基础知识吧,避免后续“踩坑”,也为了照顾一些零基础的同学。

1️⃣ 常用正则符号

符号作用示例
.匹配任意字符(除换行)a.c 匹配 abca1c
*匹配 0 次或多次a* 匹配 aaa、空字符串
+匹配 1 次或多次a+ 匹配 aaa
?匹配 0 次或 1 次a? 匹配 a 或空字符串
[]匹配括号内任意字符[abc] 匹配 abc
()分组,提取内容(ab)+ 匹配 ababab
\转义字符\" 匹配双引号

2️⃣ 贪婪与非贪婪模式

  • 贪婪模式:默认匹配尽可能多的字符。
    const str = '"Hello, World!"';
    str.match(/".*"/); // 匹配整个字符串,包括引号
    
  • 非贪婪模式:用 ? 限制,尽可能少匹配字符。
    const str = '"Hello, World!"';
    str.match(/".*?"/); // 只匹配第一个双引号包裹的部分
    

3️⃣ 正则常用方法

  • match:提取匹配的内容。
  • replace:替换匹配的内容。
  • test:判断是否匹配。

常用正则匹配双引号的例子

1️⃣ 匹配双引号内的内容

正则表达式

/"(.*?)"/

示例代码

const str = 'The quote is: "Hello, World!"';
const match = str.match(/"(.*?)"/);
console.log(match[1]); // 输出: Hello, World!

代码解释

  • ":匹配第一个双引号。
  • (.*?):非贪婪模式匹配双引号内的所有内容。
  • ":匹配第二个双引号。

2️⃣ 匹配包含双引号的整个字符串

正则表达式

".*"

示例代码

const str = 'She said, "I love programming."';
const match = str.match(/".*"/);
console.log(match[0]); // 输出: "I love programming."

代码解释

  • .*:贪婪模式匹配所有内容,包括换行符。

3️⃣ 匹配嵌套双引号的复杂场景

如果字符串里存在嵌套的双引号,常规正则就无能为力了,这时可以借助非贪婪匹配:

示例代码 如下:

const str = '"The phrase "Hello, World!" is famous."';
const matches = str.match(/"([^"]*?)"/g);
console.log(matches); // 输出: ["The phrase "Hello, World!" is famous."]

🖥️ 实战案例:用正则提取 JSON 字符串中的双引号内容

需求 :给定一段 JSON 数据示例,需求就是:我们要提取所有键和值中的内容,那么如何实现?

示例数据

{
  "name": "Alice",
  "age": 25,
  "hobbies": ["reading", "traveling"]
}

实现代码

const jsonStr = `{
  "name": "Alice",
  "age": 25,
  "hobbies": ["reading", "traveling"]
}`;

// 匹配双引号内容
const matches = jsonStr.match(/"([^"]*?)"/g);
console.log(matches);
// 输出: ["name", "Alice", "hobbies", "reading", "traveling"]

代码运行结果展示

根据如上测试代码,我本地演示结果展示如下,仅供参考哈,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

["name", "Alice", "hobbies", "reading", "traveling"]

这不就是达到了我们想要的预期结果。

代码解析

针对如上示例代码,这里我给大家详细的代码剖析下,以便于帮助大家理解的更为透彻,帮助大家早日掌握。如上这段 JavaScript 代码我主要是为了演示如何使用正则表达式匹配 JSON 字符串中的所有双引号内容。如下我逐步分析一下代码的工作原理:

  1. 定义 JSON 字符串
const jsonStr = `{
  "name": "Alice",
  "age": 25,
  "hobbies": ["reading", "traveling"]
}`;

这段代码定义了一个包含对象的 JSON 字符串。此字符串包含:

  • 一个 name 属性,值为 "Alice"
  • 一个 age 属性,值为 25
  • 一个 hobbies 属性,值为一个数组 ["reading", "traveling"]
  1. 正则表达式匹配双引号中的内容
const matches = jsonStr.match(/"([^"]*?)"/g);

正则表达式解释:

  • /"([^"]*?)"/g
    • ":匹配双引号字符。
    • ([^"]*?):这是一个捕获组,[^"]*? 表示匹配零个或多个不是双引号的字符,*? 是非贪婪模式,意味着尽量少匹配字符。这样可以确保匹配到的内容是每一对双引号之间的内容。
    • g:全局匹配标志,意味着匹配字符串中的所有符合条件的部分,而不仅仅是第一个。

运行结果:

console.log(matches);

输出结果:

["name", "Alice", "hobbies", "reading", "traveling"]

这表示正则表达式成功地提取了所有被双引号包围的内容,并将它们作为数组返回。数组中包含了:

  • name:属性名
  • Alice:属性值
  • hobbies:属性名
  • readingtraveling:数组中的元素
  1. 总结

通过正则表达式的全局匹配功能,我们可以从 JSON 字符串中提取出所有的双引号内容,包括键名和字符串值。这种方法对于简单的字符串提取非常有效,但对于嵌套结构或者更复杂的 JSON 对象,正则表达式可能会出现局限性,因此在实际应用中需要注意其适用场景。

延伸

1️⃣ 优化建议

  • 使用非贪婪模式:避免匹配过多字符。
  • 结合工具调试:推荐使用 Regex101 来实时测试正则表达式。

2️⃣ 常见陷阱

  • 性能问题:正则表达式复杂度高时,可能导致性能下降。
  • 错误匹配:嵌套引号时需特别小心,尽量避免贪婪模式。

总结

OK,写到这里,基本本期内容就要接近尾声了,通过如上内容,我们了解了如何用正则表达式匹配双引号相关内容,大体我概括如下:

  1. 从基础到进阶:掌握匹配双引号内容、嵌套引号等技巧。
  2. 实战案例:用正则解析 JSON 字符串中的双引号内容。
  3. 延伸优化:避免常见正则陷阱,编写更高效的表达式。

最后,希望通过这篇文章,大家可以彻底掌握了正则表达式如何处理双引号的场景💪 ,帮助大家能够在自己的行业道路上越走越远,无论是干前端还是后端。

... ...

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。