Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “/REG/g”和“new RegExp()”之间的行为是否不同?_Javascript_Regex_Typescript - Fatal编程技术网

Javascript “/REG/g”和“new 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(): 但这次不行了!但是,一些较简单的实例没有此类

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

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');