Html 正则表达式:选择除img标记以外的所有内容

Html 正则表达式:选择除img标记以外的所有内容,html,regex,select,text,image,Html,Regex,Select,Text,Image,我试图使用正则表达式选择一些文本,保留所有img标记不变 我发现以下代码选择了所有img标记: /<img[^>]+>/g 问题是,它只会捕获第一个img标记,然后我必须手动执行并捕获其他硬编码标记,因此我仍然不确定这是否是最佳解决方案。您必须找到图像标记的regexp可以与替换一起使用,以获得您想要的内容 假设您使用的是PHP: <(?!img)[^>]+> , replace with "" #-> strips out eve

我试图使用正则表达式选择一些文本,保留所有
img
标记不变

我发现以下代码选择了所有
img
标记:

/<img[^>]+>/g

问题是,它只会捕获第一个img标记,然后我必须手动执行并捕获其他硬编码标记,因此我仍然不确定这是否是最佳解决方案。

您必须找到图像标记的regexp可以与替换一起使用,以获得您想要的内容

假设您使用的是PHP:

<(?!img)[^>]+> , replace with "" #-> strips out every tag that is not img
(?s)^[^<]*(.*), replace with $1  #-> removes all the text before the img tag
(?s)^([^>]+>).*, replace with $1 #-> removed all the text after the img tag
$htmlwhithoutimg=preg_replace('/]+>/g',''$html);
如果您使用的是Javascript:

$htmlWithoutIMG = preg_replace('/<img[^>]+>/g', '', $html);
var htmlWithoutIMG=html.replace(/]+>/g',);

这将获取您的文本,查找
标记并将其替换为零,即从文本中删除它们,留下您想要的内容。无法回忆起
是否需要转义。

正则表达式匹配项只有一个开始和长度。这意味着您想要的结果在单个匹配中是不可能的(因为您希望结果在某一点结束,然后再继续)

最接近的方法是使用一个正则表达式,它匹配从字符串开始到
标记开始的所有内容,
标记之间的所有内容,以及从
标记结束到字符串结束的所有内容。然后您可以从该正则表达式获取所有匹配项(在您的示例中,将有两个匹配项)


上面的答案是假设您不能修改结果。如果可以修改结果,只需将
标记替换为空字符串即可获得结果。

arggghhh!你用的是什么语言,Javascript,PHP?@David:天哪,我讨厌这个网站上的HTML的反正则表达式。您不能用正则表达式解析HTML,但这样的任务可以简单地完成。他没有解析它。我看不出这个用例有什么更好的地方。HTML是不规则的,所以为什么要坚持使用错误的工具来完成这项工作呢?谢谢@Orbling,没错,我真的不想解析它,我只想选择除
]+>
之外的所有文本。这只是文本选择而已。谢谢@Orbling,对不起,如果我用错误的方式表达了自己,我想我需要选择所有文本,除了
img
标签中的一个,因为我想做你提到的事情,用空字符串替换所有非“img”文本,这只会给我留下图像。在这种情况下,我的目标是图像,而不是文本本身:)谢谢你想要所有的图像,而不是文本,与此相反?这将返回不带图像的文本,这听起来像是您仍然在说的。@ludicco您需要打开全局匹配
g
选项,我的两个示例都打开了它,请参见:全局匹配如何preg\u match\u all(),等等。不过,我不知道他是否可以这样做。谢谢@Blixt,他们像regex一样使用perl,这里有一些例子对我来说很有意义,只是用moe细节更新了我的问题
/magical regex/g # --> results in:
This is an untagged text.
<p>this is my paragraph text</p>
<a href="http://example.com/">this is a link</a>
/<(?!img)[^>]+>/g
<(?!img)[^>]+> , replace with "" #-> strips out every tag that is not img
(?s)^[^<]*(.*), replace with $1  #-> removes all the text before the img tag
(?s)^([^>]+>).*, replace with $1 #-> removed all the text after the img tag
$htmlWithoutIMG = preg_replace('/<img[^>]+>/g', '', $html);
var htmlWithoutIMG = html.replace(/<img[^>]+>/g, '');