Javascript正则表达式.replace()方法无效

3

在上一个问题中,我对正则表达式的工作原理有了一些模糊的了解,并认为我能够将其与其他字符串一起使用。显然并非如此。下面是名为 mqcontainer 的 div 的内容。

<a style="text-decoration:none;" href="http://i.imgur.com/TeC4R.png"><img src="http://i.imgur.com/TeC4R.png" alt="Posted Image">[br]<small></small></a><small><a href="http://i.imgur.com/TeC4R.png" class="view_full">View Full Image</a></small>

我的目标是过滤掉这个字符串,使得当我点击一个按钮时它显示为[url=http://i.imgur.com/TeC4R.png]Image[/url]。这是我一直在尝试的:

$("#containerbtn").click(function(){
$("#mqcontainer").each(function(){
  $(this).html(
    $(this).html().replace(
      /<a style="text-decoration:none;" href="(.*?)"><img src=".*?" alt="Posted Image">\[br\]<small><\/small><\/a><small><a href=".*?" class="view_full">View Full Image<\/a><\/small>/g,
      '[url=$1]Image[/url]'
    )
  );
});
});

无论我尝试什么都无法工作。有人可以给我一些关于这个问题的见解吗?
3个回答

3

正则表达式中应该转义[br],写为:\[br\]


没有运气,虽然我应该注意到那个。谢谢。 - Makaze
这对我很有效:'<a style="text-decoration:none;" href="http://i.imgur.com/TeC4R.png"><img src="http://i.imgur.com/TeC4R.png" alt="Posted Image">\[br\]<small></small></a><small><a href="http://i.imgur.com/TeC4R.png" class="view_full">查看完整图片</a></small>'.replace(/<a style="text-decoration:none;" href="(.*?)"><img src=".*?" alt="Posted Image">\[br\]<small><\/small><\/a><small><a href=".*?" class="view_full">View Full Image<\/a><\/small>/, '[url=$1]图片[/url]') 你可以在Firebug Console中运行它。它使用了转义的[br]。 - powtac
@Makaze:在修复其他错误时要小心引入错误。正如我在答案中指出的那样,您的编辑引入了一个额外的],而这个字符在您的编辑之前的版本中是不存在的。我已经在我的版本中测试了该字符串(尽管是通过.NET Regex),它可以工作,并且我相信基本上就是Baldrick告诉您要使用的内容。 - Chris
Chris:打错字了,已经修正。我尝试过 Baldric 的方法。我的问题中的代码是最新的,但它仍然无法工作。@powertac:我不明白应该把那个字符串放在哪里。你能给我完整的上下文吗?我的知识缺乏变得越来越明显了。唉... - Makaze

1

错误:

$("#mqcontainer").each(function(){
  $(this).html(
    ...
  )};
)};

上述代码可能不正确。因为只有一个ID为mqcontainer的div。

尝试这样做:

$("#mqcontainer").html(
    $("#mqcontainer").html().replace(/<a style="text-decoration:none;" href="(.*?)"><img src=".*?" alt="Posted Image">\[br\]<small><\/small><\/a><small><a href=".*?" class="view_full">View Full Image<\/a><\/small>/g, '[url=$1]Image[/url]')
);

我会在语义上争辩这是正确的。代码将完美地运行,因为每个都能够完美地处理单个对象集合。虽然我同意这是糟糕的代码,如果使用具有相同ID的多个内容,则可能表明存在错误。此外,我认为这更像是一条评论,因为它实际上并没有回答他的问题或提供任何帮助(嗯,在一瞥中你有一个固定的正则表达式,但你根本没有提到这个变化)。 - Chris

0
<a style="text-decoration:none;" href="(.*?)"><img src=".*?" alt="Posted Image">\[br\]<small><\/small><\/a><small><a href=".*?" class="view_full">View Full Image<\/a><\/small>

以上应该可以正常工作。

我删除了一个多余的],它在您的图像之后并在转义[br]之前。

编辑:还有一点需要注意的是,在看到powtac上面的评论后查看修订历史记录,这实际上是您在编辑中引入的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接