索引1附近的未封闭组

时间:2017-03-20 16:44:23

标签: javascript regex search

有人可以在javascript上帮助我使用这个功能吗?

我在javascript上执行了此功能,但是当我尝试在此字符串上使用时:项目1 - 1 X 500 OS 129062。 材料DE NOSSA PROPRIEDADE QUE SEGUE P / ANALISE E TESTE,SEMDÉBITO (AMOSTRAGRÁTIS)。

我收到错误:索引1附近的未关闭组

Plz,帮帮我

function retiraAcentos(texto) {

  var caracEspec = '.áàãâäéèêëíìîïóòõôöúùûüçñÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇÑ/';
  var caracComum = '.aaaaaeeeeiiiiooooouuuucnAAAAAEEEEIIIIOOOOOUUUUCN.';
  var textoResultado = '';
  for (i = 0; i < texto.length; i++) {

    var letra = texto.substr(i, 1);
    if ((letra == "*") || (letra == "?") || (letra == "\n") || (letra == '+')) {
      continue;
    }

    var posLetra = caracEspec.search(letra);    

    if (posLetra >= 0) {      
      textoResultado += caracComum.substr(posLetra, 1);
    } else {
      textoResultado += letra;
    }

  }

  return textoResultado;

}

2 个答案:

答案 0 :(得分:1)

search函数需要正则表达式。请尝试使用indexOf

var posLetra = caracEspec.indexOf(letra);

答案 1 :(得分:0)

我使用 jsfiddle 进行了一些研究。

事实证明,如果文本包含括号(打开或关闭), 然后在某一点上这样的括号成为search的论点 函数,它引发未终止的括号错误。

显然,此函数在内部使用正则表达式并使用单个括号 不是任何有效的正则表达式。

使用indexOf代替search

另一个更正:从caracEspec的开头删除点字符 和caracComum

如果您使用search,那么点(被视为正则表达式)与任何字符匹配, 在这种情况下,来自caracEspec的第一个字符,给出posLetra = 0。 这导致从caracComum获取第一个字符(幸运的是,也是一个点)。

现在不需要这些组合。