Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript语法错误:正则表达式无效_Javascript_Regex - Fatal编程技术网

javascript语法错误:正则表达式无效

javascript语法错误:正则表达式无效,javascript,regex,Javascript,Regex,我正在用javascript编写一个应用程序。在我的应用程序中,有一个搜索字符串/正则表达式的选项。问题是,如果用户键入错误的值,match将返回javascript错误。 示例代码: function myFunction() { var filter = $("#text_id").val(); var query = "select * from table"; var found; if (query.match(filter) !=

我正在用javascript编写一个应用程序。在我的应用程序中,有一个搜索字符串/正则表达式的选项。问题是,如果用户键入错误的值,match将返回javascript错误。 示例代码:

  function myFunction() {
      var filter = $("#text_id").val();
      var query = "select * from table";
      var found;
      if (query.match(filter) != -1) {
        found = true;
      } 
      else{
        found = false;
      }
       //Do something
    }
jsfiddle:

输入字符串:
sel/\

Match在模式末尾返回js错误-
未捕获的语法错误:无效的正则表达式:/sel\/:\


有没有办法检查字符串是否为有效的正则表达式?

使用try-catch语句:

function myFunction() {
    var filter = $("#text_id").val();
    var query = "select * from table";
    try {
        var regex = new RegExp(filter);
    } catch(e) {
        alert(e);
        return false;
    }
    var found = regex.test(query);
}

也许您应该尝试在“var查询”之前的一行转义斜杠。
如果要在正则表达式中搜索字符串中的斜杠,则必须将其转义,否则正则表达式会将其作为保留字符读取。

在这种情况下,实际上不需要正则表达式,但如果要避免表达式中的无效字符,则应将其转义:

RegExp.quote = function(str) {
     return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
};
用法:

var re = new RegExp(RegExp.quote(filter));
如果没有正则表达式,您可以执行以下操作:

if (query.indexOf(filter) != -1) {
}

此外,您还可以避开特殊字符。

try catch
是最快、最轻松的方法。在任何情况下,听从NHAHDH的建议都是一个好主意。在您的特定情况下,您必须转义转义符号“`”。一般来说,如果允许未验证的用户输入模式,则应该转义regexp中具有特殊含义的所有字符。如果您只是碰巧将数据存储在dom节点中,那么您可能不需要额外的努力就可以相处了。简单搜索。谢谢你指出这一点!这个答案似乎和这个没什么不同。
    RegExp.quote = function allowSpecialSymbols(str) {
      return str.replace(/([.?*+^$[\]\\(){}|-])/g, '');
    };
    const regExp = new RegExp(RegExp.quote('some \ string'), 'i');