Javascript正则表达式中无与伦比的)

时间:2011-10-25 06:09:54

标签: javascript regex

可能你可以帮助我: 我的javascript代码:

bbchatdecode: function(text) {  

var chars = Array(":\\)","8-\\)",":cry:",":oops:");
var replacements = Array('<img src=\"smiley-smile.gif\" alt=\":)\">','<img src=\"smiley-cool.gif\" alt=\"8-)\">','<img src=\"smiley-cry.gif\" alt=\":cry:\">','<img src=\"smiley-embarassed.gif\" alt=\"oops:\">');
for (var ic=0; ic<chars.length; ic++) {
  var re = new RegExp(chars[ic], "gi");
  if(re.test(text))
  {
   text = text.replace(re, replacements[ic]);
  }
}
return text;
}   

但在浏览器中我可以看到:

正则表达式

中不匹配的)

4 个答案:

答案 0 :(得分:12)

当您的某些字符串包含Unmatched ) in Javascript regular expression时,会出现

')'错误。你需要逃避这一点。这是执行此操作的功能:

function escapeRegExp(str) {
  return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}

答案 1 :(得分:2)

有效的regexp字符串是::\\\)。你应该重复三次反斜杠以逃避字符串中的某些东西。当您将regexp构建为原始JS(例如var re = /:\)/;)时,您不会这样做。

很抱歉,但我现在无法解释为什么会这样。

答案 2 :(得分:2)

与其中一个评论员一样,我不相信你的代码(不包括你遗漏了对象声明的事实)。它没有给我这个错误,如果声明一个对象,jsFiddle使它工作。

我认为现在发生的事实是,实际上是另一种语言(php,perl?)的某些代码的一部分,用于输出具有该属性的对象,并且多行字符串不能按预期工作。从实际页面复制代码,包含更多上下文,我们可能能够解决您的问题(如果这不能引导您回答)。

答案 3 :(得分:1)

让我们说你有var str='ff_!)',你需要var reg = new RegExp(str, 'gi') 是的,你会得到错误

SyntaxError: Invalid regular expression: /ff_!)/: Unmatched ')'

你真正需要的是修复:

new RegExp('ff_![(]', 'gi').test('ff_!(') 

上面一行返回true

或更好的事件此修复

new RegExp('ff[_][!][(]', 'gi').test('ff_!(')

上面的行也会返回true

解决方案:

if (/\W|[_]/g.test(str)){ //if str has any symbols
      str = str.replace(/\W|_/g, '[$&]'); //use brekits [ ] for that symbols
    }
var reg = new RegExp(str, 'gi');
reg.test('ff_!(') //return true

关于$&(将字符串指定为参数),您可以阅读here