2016-10-13 8 views
2

私はコンポーネントをRustコンパイラのエラー出力にマッチさせようとしています。これは私が使用しています正規表現です:`/ REG/g`と` new RegExp() `の動作が異なりますか?

let newErrorRegex = /(warning|error|note|help)(?:\[(.*)\])?\: (.*)\s+--> (.*):(\d+):(\d+)\n(?:((?:.+\n)+)\.+)?(?:[\d\s]+\|.*)*((?:\s+=.*)+)?/g; 

それが正常に動作しますが、それはあまりにも長いですので、私は複数行にそれを破るしたいと思います。それで試しましたnew RegExp()

let newErrorRegex = new RegExp('(warning|error|note|help)(?:\[(.*)\])?\: (.*)\s+--> (.*):(\d+):(\d+)\n(?:((?:.+\n)+)\.+)?(?:[\d\s]+\|.*)*((?:\s+=.*)+)?', 'g'); 
const match = newErrorRegex.exec(output); 

今回は動作しません。しかし、いくつかの単純な例は、そのような問題を持っていない、例えば、

let testRegexp = new RegExp('abc', 'g'); 
const match = testRegexp.exec('abcabc'); 

/REG/gnew RegExp()の違いは何ですか?どうすればこの問題を解決できますか? TypeScript 1.8.7と2.0の両方を試しましたが(関連はないとは思いますが...)。

ありがとうございます、ありがとうございます!

FYI、錆コンパイラ出力のサンプルは次のようになります。あなたは\は彼らが何であるかであるとする構文/foo/を使用しているあなたの最初の行でhttps://regex101.com/r/vKFWYW/1

答えて

3

new Regex('foo')文字列リテラルなので、バックスラッシュをエスケープする方法を教えてください。どちらにつながる:

let newErrorRegex = new RegExp('(warning|error|note|help)(?:\\[(.*)\\])?\\: (.*)\\s+--> (.*):(\\d+):(\\d+)\\n(?:((?:.+\\n)+)\\.+)?(?:[\\d\\s]+\\|.*)*((?:\\s+=.*)+)?', 'g'); 
+0

私は実質的にあなたがリアルタイムでそれを追加見ていた@Soviut 37sec、かなり速い編集:) –

+0

;)あなたは完全にするためにあなたの答えに逃げスラッシュとの表現の修正版を追加する必要があります。 – Soviut

+0

@ソビエット完了:) –

関連する問題