12

我正在用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

4 回答 4

23

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

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

用法:

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

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

if (query.indexOf(filter) != -1) {
}
于 2013-04-23T11:55:32.167 回答
15

使用 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);
}
于 2013-04-23T11:47:48.747 回答
1
    RegExp.quote = function allowSpecialSymbols(str) {
      return str.replace(/([.?*+^$[\]\\(){}|-])/g, '');
    };
    const regExp = new RegExp(RegExp.quote('some \ string'), 'i');

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

于 2021-06-15T12:28:12.817 回答
0

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

于 2013-04-23T11:51:58.820 回答