我正在检查我的字符串是否具有要替换的特殊字符,但是对于以下字符串,我遇到以下问题
字符串
(Lot P Verdes)
功能
function retira_acentos(palavra) {
com_acento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ';
sem_acento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC';
nova='';
for(i=0;i<palavra.length;i++) {
if (com_acento.search(palavra.substr(i,1))>=0) {
nova+=sem_acento.substr(com_acento.search(palavra.substr(i,1)),1);
}
else {
nova+=palavra.substr(i,1);
}
}
return nova.toUpperCase();
}
错误
行:如果(com_acento.search(palavra.substr(i,1))> = 0)
未捕获的语法错误:无效的正则表达式:/(/:未终止的组
答案 0 :(得分:1)
您在这里偶然发现的问题是String#search
需要一个regexp
作为输入,但是,您似乎想搜索一个字符串输入,而不是regexp
。在这种情况下,请改用String#indexOf
。
尝试更改这些行,看看是否能为您提供所需的输出:
if (com_acento.indexOf(palavra.substr(i,1))>=0) {
nova+=sem_acento.substr(com_acento.indexOf(palavra.substr(i,1)),1);
}
答案 1 :(得分:0)
在正则表达式中,圆括号用于定义组。在这种情况下,正则表达式分析器认为您打开了一个组,但是却忘记了关闭它。
我想你不想打开一个小组。您只想匹配文字字符。
要匹配文字字符,在javascript正则表达式中,您有两种方法:
使用后退字符{{1}}来转义字符。示例:\
将您的角色放在方括号中。示例:/\(/
在您的情况下,最好使用第二种方法,因为它适用于任何字符(即使不需要转义的字符),也适用于许多字符。
因此,我建议您以这种方式更改[(]
的参数:
search