错误未捕获的语法错误:无效的正则表达式:/(/:未终止的组

时间:2019-02-11 14:23:18

标签: javascript

我正在检查我的字符串是否具有要替换的特殊字符,但是对于以下字符串,我遇到以下问题

字符串

(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)

未捕获的语法错误:无效的正则表达式:/(/:未终止的组

2 个答案:

答案 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