1

JavaScript文字列が正規表現形式であることを確認してから正規表現に変換するにはどうすればよいですか?

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 に答える