将字符串转换为RegExp

时间:2013-01-08 17:06:03

标签: javascript regex

如何检查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]*)/

1 个答案:

答案 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;
}