【问题标题】:Jquery :invalid regular expressionJquery:无效的正则表达式
【发布时间】:2014-02-07 20:30:39
【问题描述】:

我在使用“jquery_token_inpuy”的 jquery 代码时遇到问题

return template.replace(new RegExp(
    "(?![^&;]+;)(?!<[^<>]*)(" + value + ")(?![^<>]*>)(?![^&;]+;)", "g"
), highlight_term(value, term));

我有这个错误:SyntaxError: Invalid regular expression: / Nothing to repeat.

有什么问题?

【问题讨论】:

  • 嗯,你的正则表达式是无效的......为什么不把它打印出来,然后再发送到新的RegExp,让我们看看......
  • 变量“value”中有什么
  • 另外,你能告诉我们你想匹配什么模式吗?最好带有一些示例数据(有效和无效匹配)。
  • 此代码来自:loopj.com/jquery-tokeninput
  • 当我尝试从搜索字段中查找“c++”时,它没有找到。特殊字符有问题

标签: javascript jquery jquery-ui jquery-plugins jquery-tokeninput


【解决方案1】:

您可以使用例程来“引用”所有元字符。这样的事情将是一个开始:

function regexSanitize( str ) {
  return str.replace(/([.+*?:\[\](){}|\\])/g, "\\$1");
}

然后:

return template.replace(
  new RegExp(
    "(?![^&;]+;)(?!<[^<>]*)(" + 
    regexSanitize(value) + 
    ")(?![^<>]*>)(?![^&;]+;)", "g"), 
  highlight_term(value, term)
);

【讨论】:

  • 感谢您的想法。但是函数 regexSanitize 是否完整并经过测试?
  • @user3242743 它经过了一点测试。它应该适用于它寻找的元字符,但潜在的问题有点复杂。
  • 您的函数在键入“c+”时起作用,但如果我键入“c++”,则会引发异常。可能是什么问题?
  • @user3242743 你确定你在“regexSanitize”函数的正则表达式末尾包含了“g”吗?
  • SyntaxError: 无效的正则表达式:/(?![^&;]+;)(?!]*)(c++)(?![^]*> )(?![^&;]+;)/: 没什么好重复的
猜你喜欢
  • 1970-01-01
  • 2020-08-11
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多