【问题标题】:javascript unterminated character class [duplicate]javascript未终止字符类[重复]
【发布时间】:2013-01-16 08:30:37
【问题描述】:
var badCode = "\(INST1,\\[0,";
var regex = new RegExp(badCode, "igm");

得到“未终止的字符类”错误。

如何解决?

TIA

尝试响应者对此帖子的建议,请查看以下屏幕截图(您可能需要右键单击图像并在新标签中打开以使其清晰可见): 注意 new_bad_thing 的值(相当于上面的 badCode)

这是我点击运行按钮时的屏幕打印(请注意错误信息):

【问题讨论】:

  • 我得到SyntaxError: Invalid regular expression: /(INST1,\[0,/: Unterminated group,即括号(字符串中的字符1)没有匹配的)。它被视为"\(" === "(" 的一个组,您需要写"\\(" 以获取\(

标签: javascript regex


【解决方案1】:

badCode处添加另一个反斜杠:

var badCode = "\\(INST1,\\[0,";
var regex = new RegExp(badCode, "igm");

因为您需要一个转义 ( 在正则表达式本身内(信号它是一个文字括号)和一个用于 javascript 的转义。

【讨论】:

  • 试过了,badCode = "\\(INST1,\\[0,", 仍然得到“未终止的字符类”。验证 badCode 是您在 chrome 调试器中显示的内容。
  • 这很奇怪。请参阅此fiddle,它证明了它的工作原理。
  • 你是对的。然而,正如你从我的屏幕截图中看到的那样,这就是我所得到的。会不会是 chrome 的 bug?
  • 发现问题:即使调试器显示“new_bad_thing”字符串与您的“badcode”相同,“.replace(/\\/g,"\\\ \")" 导致问题。当我把它拿出来时,代码就可以工作了。
【解决方案2】:

不,它得到“未终止的括号”,因为您忘记了转义反斜杠。为什么不使用正则表达式文字?

var regex = /\(INST1,\[0,/igm;

【讨论】:

  • 因为 badCode 可以是任意数量的东西,我只是以文字为例
  • @davej:然后用另一个反斜杠转义第一个反斜杠。但是错误不能是该字符串的“未终止字符类”。出了点问题。
  • 感谢您的意见,我编辑了原始帖子以显示我得到的内容。
  • @davej:看起来替换应该是\\)\\(,而不是\\\\)\\\\(
  • 这是我原来的,但我改变它匹配提供 zelig 的解决方案
猜你喜欢
  • 2016-10-01
  • 1970-01-01
  • 2014-09-20
  • 2018-02-13
  • 1970-01-01
  • 2011-07-24
  • 2012-08-21
  • 1970-01-01
  • 2011-04-06
相关资源
最近更新 更多