远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 《C程序设计语言》
心情随笔
  • 文章分类
  • 文章标签
  • 文章归档
友情链接
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 《C程序设计语言》
心情随笔
  • 文章分类
  • 文章标签
  • 文章归档
友情链接
关于我
GitHub (opens new window)
  • JavaScript

    • 记一次 JavaScript 中的正则转义踩坑
      • 问题复现
      • 原因分析
      • MDN 解释
  • Vue3

  • 前端开发
  • JavaScript
terwer
2024-03-30
目录

记一次 JavaScript 中的正则转义踩坑

本文讨论了在 JavaScript 中使用正则表达式替换字符串时,特殊字符可能导致匹配失败的问题。通过对原始字符串中的特殊字符进行转义处理,然后创建正则表达式进行匹配替换,可以解决这一问题。示例代码演示了如何修复图片链接替换失败的情况。

# 问题复现

// 定义原始图片链接和新图片链接
const img = "![image](http://127.0.0.1:54362/assets/image-20240330091153-5d8kt15.png)"
const newImg = "![image](http://onu1xvsy0.bkt.clouddn.com/test/20240330091641..png)"
let newcontent = "![image](http://127.0.0.1:54362/assets/image-20240330091153-5d8kt15.png)"

// 创建用于匹配原始图片链接的正则表达式
const imgRegex = new RegExp(img, "g")
console.log("imgRegex =>", imgRegex)

// 尝试替换内容中的图片链接
newcontent = newcontent.replace(imgRegex, newImg)
console.log("newcontent =>", newcontent) 
1
2
3
4
5
6
7
8
9
10
11
12

先看一下这个代码,我们的期望是图片链接能够正常替换,但是运行之后就会发现,根本不是我们期望的那样。

​image.png​

# 原因分析

问题就出现在由于原始图片链接中包含特殊字符,如斜杠和点,这些字符在正则表达式中具有特殊含义,可能导致匹配失败。需要对原始图片链接中的特殊字符进行转义处理,以确保正则表达式能够正确匹配。

正则的这个构造方法需要自己处理转义字符问题。因此,我们得到下列修复方法:

​image.png​

现在,我们已经可以得到正确结果了:

​image.png​

# MDN 解释

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#flags_in_constructor

‍

编辑 (opens new window)
#正则表达式#替换#转义处理
上次更新: 2024/06/13, 05:26:42
Vue3 配合 Element-Plus 和 iframe-resizer 完美实现抽屉 Drawer 和 iframe

Vue3 配合 Element-Plus 和 iframe-resizer 完美实现抽屉 Drawer 和 iframe→

最近更新
01
深入剖析MyBatis的架构原理
12-04
02
通用 Mapper 封装
10-09
03
插件源码进一步分析与pageHelper分页插件介绍
10-09
更多文章>
Theme by Vdoing | Copyright © 2011-2024 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式