【问题标题】:Regex replaces everything that matches any character正则表达式替换匹配任何字符的所有内容
【发布时间】:2010-07-11 03:31:18
【问题描述】:
a[b].innerHTML=a[b].innerHTML.replace(RegExp('['+bbc[c][0]+']','ig'),bbc[c][1])

这基本上就是我正在使用的。它包含在两个循环中,因此应该可以解释为什么它看起来像它所做的那样。基本上我想替换与'['+数组中的变量+']'匹配的东西。我正在为一个免费论坛制作一个 BBCode 脚本,不要指点我任何 BBCode 脚本。 问题是正则表达式正在替换与任何字符匹配的所有内容。因此,它将 [, q, c, o, d, e, ] 全部替换为数组的第二部分。 (QCODE 是一个正在使用的 BBCode 示例)我不知道它是否在带有 [] 的普通 /regex/ 中这样做,但这很烦人。我试过转义 [] ('\['+v+'\]'),我试过 eval(),我试过你能想象到的一切。我需要让这件事像它应该的那样工作,因为一切都按照它应该的方式设置。如果您知道如何解决此问题,请回答。不过,我希望您在回答之前测试您的解决方案,因为您知道我尝试了多少方法来完成这项工作。

【问题讨论】:

  • 要测试您的确切情况,我们需要知道 a[b].innerHTML 和 bbc[c][0]。
  • 正如 TNi 建议的那样,您需要提供一个或多个单元测试。
  • 变量周围有括号的任何内容。没关系。正如我在帖子中所说,qcode 就是一个例子。它只需要用 ANYTHING 替换指定变量周围的括号,只要它不替换与变量的任何字母匹配的 EVERYTHING。所以只替换“This bbcode is”中的[qcode]而不是“This bb is”(替换代码)。

标签: javascript regex replace variables


【解决方案1】:

使用正确的转义字符:

RegExp('\\['+bbc[c][0]+'\\]','ig'),

/ 只是一个普通字符(除了你没有使用的正则表达式文字),转义字符是\。您还必须转义两次,一次用于字符串文字,一次用于正则表达式。

【讨论】:

  • 这个帖子是错字,因为我赶时间。我使用了正确的转义字符,它没有用。这就是为什么我在回答之前说测试。
  • 如果您还没有看到我有,请在您回复前一分钟。
  • @Ruffian,您实际上需要使用 '\\\[' ,因为您为字符串文字转义一次,为正则表达式转义一次。我之前把它漏掉了。
  • 在发布我的答案之前,我没有看到您更新的答案。好工作。从这一切中吸取的教训是,问题错别字分散了真正问题的注意力。我经常看到这个错误,但是因为我对这个问题感到困惑,所以没有立即发现它。
【解决方案2】:

您的代码不工作的原因是因为您正在使用 RegExp,它接受一个字符串作为正则表达式。在此字符串中,您需要对反斜杠转义字符进行转义。以下将起作用:

​var str = 'Before. [qcode] After.';
alert(str.replace(RegExp('\\[qcode\\]', 'ig'), 'During.'));​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

【讨论】:

  • 确实有效。这似乎是我应该想到的。如果我能不止一次给你的答案打高分就好了,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2020-03-16
  • 2015-11-30
  • 2012-09-20
  • 1970-01-01
  • 2022-12-01
相关资源
最近更新 更多