1

如何检查 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]*)/哪个有效。

4

1 回答 1

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;
}
于 2013-01-08T17:08:01.243 回答