【问题标题】:Unclosed group near index 1索引 1 附近的未闭合组
【发布时间】:2017-03-20 16:44:22
【问题描述】:

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

我在 javascript 上完成了上面的这个功能,但是当我尝试在这个字符串上使用时:Item 1 – 1 X 500 OS 129062。 MATERIAL DE NOSSA PROPRIEDADE QUE SEGUE P/ANALISE E TESTE, SEM DÉBITO (AMOSTRA GRÁTIS)。

我收到一个错误:索引 1 附近的未封闭组

请帮帮我

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;

}

【问题讨论】:

  • 此类示例输入发生错误:"foobar".search("(")。请参阅@x-ray 答案以获取解释。
  • 我认为问题在于 search 函数,因为它采用正则表达式。并且绝对单人( 是一个未封闭的组。最好使用indexOf 替代方案。

标签: javascript regex search


【解决方案1】:

search 函数需要一个正则表达式。尝试改用indexOf

var posLetra = caracEspec.indexOf(letra);

【讨论】:

    【解决方案2】:

    我使用 jsfiddle 做了一些研究。

    事实证明,如果文本包含括号(打开或关闭), 那么这样的括号在某个时候变成了search的论点 函数并引发未终止的括号错误。

    显然这个函数在内部使用了正则表达式和一个单括号 不是任何有效的正则表达式。

    使用indexOf 而不是search

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

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

    现在不需要这些组合了。

    【讨论】:

      猜你喜欢
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      相关资源
      最近更新 更多