我正在用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.
有没有办法检查字符串是否是有效的正则表达式?
答案 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”之前尝试转义一行上的斜杠。 如果要在字符串中搜索正则表达式中的斜杠,则必须对其进行转义,否则正则表达式会将其作为保留字符读取。