Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 捕获正则表达式模式不适用于多行字符串_Javascript_Regex - Fatal编程技术网

Javascript 捕获正则表达式模式不适用于多行字符串

Javascript 捕获正则表达式模式不适用于多行字符串,javascript,regex,Javascript,Regex,我试图读取包含多行的字符串,\n该字符串具有以下模式: Total : 30 ================ Loaded : 27 Loading : 0 Failed : 3 Done.. time taken : 3.49 seconds. ============= 2020-03-08 15:39:26 包含所用时间的行有时可以用毫秒、秒或分钟表示。 所以我需要捕获单元之前的数字,单元本身,以及由Failed表示的数字 我能够提取时间持续时间加上单位没有

我试图读取包含多行的字符串,\n该字符串具有以下模式:

Total     : 30
================
Loaded    : 27
Loading   : 0
Failed    : 3

Done.. time taken : 3.49  seconds.
=============
2020-03-08 15:39:26
包含所用时间的行有时可以用毫秒、秒或分钟表示。 所以我需要捕获单元之前的数字,单元本身,以及由Failed表示的数字

我能够提取时间持续时间加上单位没有任何问题。也许是因为他们都在同一条线上

let matches = /taken\D+([\d\.]+)\s+(\w+)/g.exec(trace);
matches[1];  // 3.49
matches[2];  // seconds
但是当我试图提取失败的数字时,正则表达式不起作用

/Failed\s+:\s(\d+).*?taken\D+([\d\.]+)\s+(\w+)/g  
/Failed\s+:\s(\d+).*?taken\D+([\d\.]+)\s+(\w+)/gm  
/Failed\s+:\s(\d+)[.\n\r]*?taken\D+([\d\.]+)\s+(\w+)/g
这些都不管用。 我知道我可以通过在执行正则表达式之前删除所有新行字符\n来解决问题,但我想知道我的部件犯了什么错误

let trace=Total:30\n +======================\n +已加载:27\n +正在加载:0\n +失败:3\n +\n +完成。。所用时间:3.49秒。\n +================\n + 2020-03-08 15:39:26; let pattern=/Failed\s+:\s+\d+[\n\r.]*?take\d+[\d\.]+\s+\w+/gm; 让matches=pattern.exectrace; 让failedCount=匹配[1];//应该是3 让timetake=匹配[2];//应该是3.49 让timeUnit=匹配[3];//应该是秒您可以使用s来创建。表达式包括\n。像这样:

let trace=Total:30\n +======================\n +已加载:27\n +正在加载:0\n +失败:3\n +\n +完成。。所用时间:3.49秒。\n +================\n + 2020-03-08 15:39:26; 让pattern=newregexpfailed\\s+:\\s+\\d++.*take\\d+[\\d\.]+\\s+\\w+,s; 让matches=pattern.exectrace; 让failedCount=匹配[1];//应该是3 让timetake=匹配[2];//应该是3.49 让timeUnit=匹配[3];//应该是几秒钟
console.logfailedCount,时间,时间单位;我只是将s添加到regex/……/gs中,这很有效。谢谢你的好意。我将它包装在RegExp对象中,因为出于某种原因,这里的剪接不支持在末尾添加s,因为这里的g看起来是多余的。因为您不需要查找此表达式的多个外观