我正在尝试匹配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/g
和new RegExp()
之间有什么区别?我该如何解决这个问题?我已经尝试过TypeScript 1.8.7和2.0(虽然我认为它不相关......)。
任何帮助将不胜感激,谢谢!
仅供参考,Rust编译器输出的示例可以是:https://regex101.com/r/vKFWYW/1
答案 0 :(得分:3)
在第一行中,您使用的语法private void updateAB() {
...
synchronized(this) {
// Computing the new a and b values
a = ... * increaseVal;
b = ... * increaseVal;
}
...
}
让/foo/
成为现实。
使用\
你可以逃避反斜杠,因为它是一个字符串文字。这导致:
new Regex('foo')