首页 > 解决方案 > 如何替换长文本子字符串中的特定字符?

问题描述

从javascript,给定这个多行文本(存储在一个变量中):

+++ diagramme
graph TD
    A[fooA] ==> B[fooB]
    style A color:blue
    B --> C[(<img src="https://c7.alamy.com/compfr/jcdcx7/image-d-icone-de-soleil-jcdcx7.jpg" width="50">)]
    C --> D[fooD]
    B --> D
    click D "https://fii.com" _blank
+++

我正在寻找一种方法将所有 " 替换为 img 标签中的 char '。在 img 标签中,属性的数量可能会有所不同。

在我的示例中,预期的结果是:

+++ diagramme
graph TD
    A[fooA] ==> B[fooB]
    style A color:blue
    B --> C[(<img src='https://c7.alamy.com/compfr/jcdcx7/image-d-icone-de-soleil-jcdcx7.jpg' width='50'>)]
    C --> D[fooD]
    B --> D
    click D "https://fii.com" _blank
+++

我知道如何使用正则表达式(感谢https://regex101.com/之类的神奇网站!),所以我可以使用这个简单的模式 /(<img)(.*)(>)/g 捕获 img 标签。但我不知道如何在通过正则表达式获得的子字符串中将所有出现的特定字符(此处“)替换为另一个(此处 ')。

编辑:img 标签的位置和数量在结构'+++ diagramme ... +++'中可能有所不同。下面是另一个例子:

+++ diagramme
graph TD
    A[fooA] ==> B[(<img src="https://fuu/image1.jpg" width="50">)]
    B --> C[fooC]
    click B "https://faa.com" _blank
    C --> D[(<img src="https://fuu/image2.jpg">)]
+++

和预期的结果:

+++ diagramme
graph TD
    A[fooA] ==> B[(<img src='https://fuu/image1.jpg' width='50'>)]
    B --> C[fooC]
    click B "https://faa.com" _blank
    C --> D[(<img src='https://fuu/image2.jpg'>)]
+++

谢谢你的帮助 :)

标签: javascriptregexecmascript-6

解决方案


使用回调函数:

const test = `+++ diagramme
graph TD
    A[fooA] ==> B[fooB]
    style A color:blue
    B --> C[(<img src="https://c7.alamy.com/compfr/jcdcx7/image-d-icone-de-soleil-jcdcx7.jpg" width="50">)]
    C --> D[fooD]
    B --> D
    click D "https://fii.com" _blank
+++`
console.log(test.replace(/<img[^>]*>/g, (x) => x.replace(/"/g, "'") ))


推荐阅读