【问题标题】:Escaped but still 'Uncaught SyntaxError: Invalid regular expression:regex: Unterminated group'转义但仍然“未捕获的语法错误:无效的正则表达式:正则表达式:未终止的组”
【发布时间】:2018-12-28 13:14:47
【问题描述】:

我很难弄清楚如何转义我的正则表达式。我已经用这个函数逃脱了它:

function escapeRegExp(string) {
    return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
}

但我仍然有错误:

未捕获的 SyntaxError:无效的正则表达式: 正则表达式:未终止的组

function escapeRegExp(string) {
     return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
}
var str = "ubuntu-18.10-desktop-amd64.iso.torrent"
var search = "*Ubuntu.18*"
search = escapeRegExp(search);
var re = new RegExp('^(?=.*' + search.split(/[\s,_.:-]+/).join(')(?=.*') + ')', 'gi');
var result = re.test(str);
console.log(result);

【问题讨论】:

  • 在您的转义函数中,您转义了稍后拆分的点。最好将转义应用于拆分的元素或从您的转义函数中删除将用于拆分的字符。
  • 您最终传递给new RegExp() 的字符串是^(?=.*\*Ubuntu\)(?=.*18\*),它在第一组的结束) 之前有一个杂散的反斜杠。
  • 您可以尝试额外的步骤:先拆分,然后独立转义部分,然后加入。
  • 所以我不需要在我的函数中转义它?

标签: javascript jquery regex


【解决方案1】:

* 添加到字符类并在其前面加上一个可选的反斜杠:

search.split(/\\?[\s,_.:*-]+/).join(')(?=.*')

如果没有这个,上述方法会在\. 处拆分,其中找到一个句点并保持\ 完整,随后在连接方法中) 之前会导致错误。

【讨论】:

  • 所以只有点导致了这个问题?
  • 是的,因为它在escapeRegExp 函数和拆分方法中都存在。但顺便说一句,如果要在搜索短语中输入更多非单词字符,您可以考虑将它们包含在 split 方法中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 2015-03-27
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多