在javascript中使用regex表达式进行替换

replacement using regex expression in javascript

本文关键字:表达式 替换 regex javascript      更新时间:2023-09-26

我在java中有一个HTML字符串,它在某些属性中包含数据

就是一个例子

<img class="show-grid" src="http://localhost:4502/content/dam/original" alt="4.7-products.jpg">

现在,我遇到的问题是,我想在src属性(这里以http开头,以original结尾的字符串(中的字符串末尾附加一些字符串,src属性是url。

我只知道:

  • 字符串总是以http开头

有些事情我不知道

  • 字符串的结束顺序是什么
  • 在这里的target属性之后可能还有另一个属性(在本例中,target属性是src(

我尝试了以下正则表达式:

target.search(/('bhttp.*'"'b)/gi)

这个想法是找到所有字符串:

  • 其以http开始,以"结束

所以,我想这个正则表达式会给我以下字符串:

http://localhost:4502/content/dam/original"

但相反,它给了我:

http://localhost:4502/content/dam/original" alt="

知道它为什么超越当前单词吗?是因为它在单词之间寻找空格,然后当它在空格分隔的新词中找到"时,它就停止了搜索。

如何修改target.search(/('bhttp.*'"'b)/gi)以获得所需的结果?

只需拆分并添加回您需要的具有正面环视的字符

String string = "http://yourtestinthstsdfasdfasdfhttp://moreteststrings";
String[] parts = string.split("(?=http)");
String part1 = parts[0]; // is http://yourtestinthstsdfasdfasdf
String part2 = parts[1]; // is http://moreteststrings

/http.*(?='"'s)/gi将匹配http中的任何内容,直到结束引号后面跟着空白。它使用(?=(,称为正向前瞻。

另一种方法是,如果您只想匹配src属性内的任何内容,而不需要推测是否存在http字符串:src="([^"]*)

你可以玩它https://regex101.com/r/rH0yZ2/3.

您的正则表达式是"贪婪的"(请参阅:

https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/RegExphttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp)。要更改它,请将/('bhttp.*'"'b)/修改为/('bhttp.*?'"'b)/

编辑:这仍然不起作用,请参阅下方的消息

该正则表达式使用默认的贪婪修饰符。这意味着它正在搜索尽可能多的*(任何字符(。相反,您要寻找的是*?(零或更多,非贪婪(修饰符,它可以改变这种行为。

您的新正则表达式搜索将如下所示:

target.search(/http.*?'"/gi)