`/ REG / g`和`new RegExp()`之间的不同行为?

时间:2016-10-13 16:24:19

标签: javascript regex typescript

我正在尝试匹配Rust编译器错误输出中的组件。这是我正在使用的正则表达式:

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(虽然我认为它不相关......)。

任何帮助将不胜感激,谢谢!

仅供参考,Rust编译器输出的示例可以是:https://regex101.com/r/vKFWYW/1

1 个答案:

答案 0 :(得分:3)

在第一行中,您使用的语法private void updateAB() { ... synchronized(this) { // Computing the new a and b values a = ... * increaseVal; b = ... * increaseVal; } ... } /foo/成为现实。

使用\你可以逃避反斜杠,因为它是一个字符串文字。这导致:

new Regex('foo')