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

时间:2013-04-23 11:43:22

标签: javascript regex

我正在用javascript编写一个应用程序。在我的应用程序中,有一个选项来搜索字符串/正则表达式。问题是匹配返回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:http://jsfiddle.net/ZVNMq/

输入字符串:sel/\

匹配返回js错误 - Uncaught SyntaxError: Invalid regular expression: /sel\/: \ at end of pattern.

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

4 个答案:

答案 0 :(得分:14)

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

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

用法:

var re = new RegExp(RegExp.quote(filter));

如果没有正则表达式,您可以这样做:

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

答案 1 :(得分:8)

使用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);
}

答案 2 :(得分:1)

    RegExp.quote = function allowSpecialSymbols(str) {
      return str.replace(/([.?*+^$[\]\\(){}|-])/g, '');
    };
    const regExp = new RegExp(RegExp.quote('some \ string'), 'i');

此外,您可以转义特殊字符。

答案 3 :(得分:0)

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