我正在编写一个node.js脚本来对大量屏幕截图进行分组。
我想匹配两种不同的模式:
/(?<date>\d{4}-\d{2}-\d{2}) (?<time>\d{2}_\d{2}_\d{2})(-| - )(?<window>.*?)(-| - )(?<index>\d{6})(?<extension>\.(png|jpg|jpeg))/g
/(?<date>\d{4}-\d{2}-\d{2}) (?<time>\d{2}_\d{2}_\d{2})(-| - )(?<window>.*?)(?<extension>\.(png|jpg|jpeg))/g
在这里您也可以在我的代码中看到它(简化为有问题的部分)https://jsfiddle.net/sfwr750n/
这是regex101 https://regex101.com/r/dxGFNN/1
起初我以为那只是node.js,但是Chrome存在相同的问题(没有尝试使用firefox,上次我检查它不支持命名组),更令人困惑的是regex101匹配所有内容如预期的那样。
答案 0 :(得分:2)
您的正则表达式使用async ngOnInit(){
const res = await this.es.getEventList();
console.log(JSON.stringify(res));
}
标志,这意味着它们保留状态。例如,您说过第二个字符串与您的两个表达式都不匹配,但前提是表达式从头开始:
g
const rex = /(?<date>\d{4}-\d{2}-\d{2}) (?<time>\d{2}_\d{2}_\d{2})(-| - )(?<window>.*?)(?<extension>\.(png|jpg|jpeg))/g;
const str = "2017-08-31 18_57_43-shouldwork.png";
console.log(rex.exec(str)); // Works
console.log(rex.exec(str)); // Fails
我建议您不要使用.as-console-wrapper {
max-height: 100% !important;
}
标志,并且 do 在开头和结尾都使用定位符,以便匹配整个字符串。另外,如果您要在较大的文本块中查找这些字符串,只需确保在开始搜索新的文本块时在正则表达式上设置g
,这样就不会从先前的位置继续离开。