Javascript “/REG/g”和“new RegExp()”之间的行为是否不同?
我正在尝试匹配Rust编译器错误输出中的组件。这是我正在使用的regexp:Javascript “/REG/g”和“new RegExp()”之间的行为是否不同?,javascript,regex,typescript,Javascript,Regex,Typescript,我正在尝试匹配Rust编译器错误输出中的组件。这是我正在使用的regexp: let newErrorRegex = /(warning|error|note|help)(?:\[(.*)\])?\: (.*)\s+--> (.*):(\d+):(\d+)\n(?:((?:.+\n)+)\.+)?(?:[\d\s]+\|.*)*((?:\s+=.*)+)?/g; 它工作正常,但太长了,所以我想把它分成多行。然后我尝试了newregexp(): 但这次不行了!但是,一些较简单的实例没有此类
let newErrorRegex = /(warning|error|note|help)(?:\[(.*)\])?\: (.*)\s+--> (.*):(\d+):(\d+)\n(?:((?:.+\n)+)\.+)?(?:[\d\s]+\|.*)*((?:\s+=.*)+)?/g;
它工作正常,但太长了,所以我想把它分成多行。然后我尝试了newregexp()
:
但这次不行了!但是,一些较简单的实例没有此类问题,例如:
let testRegexp = new RegExp('abc', 'g');
const match = testRegexp.exec('abcabc');
/REG/g
和new RegExp()
之间有什么区别?如何解决此问题?我已经试过TypeScript 1.8.7和2.0(尽管我不认为这是相关的…)
任何帮助都将不胜感激,谢谢
仅供参考,Rust编译器输出的一个示例可能是:在第一行中,您使用的语法是
/foo/
,使\
保持原样
使用newregex('foo')
您可以知道如何避开反斜杠,因为它是字符串文字。这导致:
let newErrorRegex = new RegExp('(warning|error|note|help)(?:\\[(.*)\\])?\\: (.*)\\s+--> (.*):(\\d+):(\\d+)\\n(?:((?:.+\\n)+)\\.+)?(?:[\\d\\s]+\\|.*)*((?:\\s+=.*)+)?', 'g');
@Soviut 37秒,相当快的编辑:)我实际上是在看着你实时添加;)为了完整起见,您应该在答案中添加带转义斜杠的表达式的更正版本。@Soviut done:)谢谢您的快速回答!我现在感觉像个傻瓜lol@FrederickZhang这就是我们学习的方式;)
let newErrorRegex = new RegExp('(warning|error|note|help)(?:\\[(.*)\\])?\\: (.*)\\s+--> (.*):(\\d+):(\\d+)\\n(?:((?:.+\\n)+)\\.+)?(?:[\\d\\s]+\\|.*)*((?:\\s+=.*)+)?', 'g');