如何检查JavaScript字符串是否为RegExp格式,然后将其转换为RegExp?
我找到了一种使用RegExp的方法,但规则过于复杂,无法使其正确。
function str2Regex(str){
var rule = /\/(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\\/])*\]|[^\x00-\x1f\\\/\[])+\/([gim]*)/;
var match = str.match(rule);
return match ? new RegExp(match[1],match[3]) : str;
}
现在我正在使用/\/(.*)\/(?=[igm]*)([igm]*)/
。
答案 0 :(得分:1)
最简单的方法,也许是最正确的方法是使用try / catch:
try {
r = new RegExp(str);
} catch(error) {
// no good
}
当字符串与格式正确的正则表达式不匹配时,会得到SyntaxError
。
如果要测试其值类似于已编译正则表达式的字符串(例如"/\b=\b/g"
),则可以使用以下函数:
function checkCompiledRegex(str) {
if (str[0]!='/') return false;
var i = str.lastIndexOf('/');
if (i<=0) return false;
try {
new RegExp(str.slice(1, i), str.slice(i+1));
} catch(error) {
return false;
}
return true;
}