首页 > 解决方案 > 改进 JS Regex 以排除包含特定字符串的行

问题描述

我有一个 JS 正则表达式来替换包含 p 标签内的 img 标签的字符串部分。我正在捡那些我不想要的。

我要查找和替换的示例(src 和类并不总是相同的顺序,并且 imageData 并不总是相同的 base64“数字”,所以我不能只匹配整个字符串):


<p><img class="classIWantToMatch" src="data:image/gif;base64,dataForImage"></p>
<p><img src="data:image/gif;base64,imageData" class="classIWantToMatch" ></p>

也被找到和替换的样本(但我不想):

<p><img src="/myFiles/my.PNG" alt=""></p>

正则表达式:

/(<p><img).*?(class="classIWantToMatch").*?(<\/p>)/g

我试图弄清楚前瞻和后瞻,但我似乎无法让它做我想做的事。

除了你的基本谷歌搜索,我在这里试过:

搜索包含字符串但不包含另一个字符串的行的正则表达式

使用正则表达式查找包含一个字符串并排除第二个字符串的字符串?

以及其他几个。我想我只是不明白向前/向后。

标签: regex

解决方案


此 RegEx可能会帮助您仅获得所需的目标或设计一个表达式来做到这一点:

(<p><img.+class=\")(classIWantToMatch)(\".+<\/p>) 

在此处输入图像描述

  • 您只能在第二个捕获组中绑定您想要的目标。
  • 使用简单的左边界(<p><img.+class=\")和右边界,(\".+<\/p>)您可能可以这样做。但是,为了安全起见,您可能会考虑使这些边界更具限制性。例如,.+可以仅限于一个字符列表。

推荐阅读