可能你可以帮助我: 我的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;
}
但在浏览器中我可以看到:
正则表达式
中不匹配的)
答案 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