gpt4 book ai didi

javascript - JS RegEx 即使应该匹配也不匹配

转载 作者:行者123 更新时间:2023-12-01 01:12:04 24 4
gpt4 key购买 nike

我正在编写一个 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
  1. '2017-08-31 18_57_42-shouldwork.png' 符合预期的第二个
  2. “2017-08-31 18_57_43-shouldwork.png”两者都不匹配
  3. “2017-08-31 18_57_42-shouldwork - Kopie.png”符合预期的第二个
  4. “2017-08-31 18_57_42-shouldwork2.png”不匹配
  5. '2019-03-09 11_11_09 - Shouldwork - 000003.png' 符合预期的第一个
  6. '2019-03-09 11_11_10 - Shouldwork - 000003.png' 匹配第二个
  7. “应该失败.png”与预期不匹配

这也是 fiddle ,你可以用我的代码看到它(减少到有问题的部分)https://jsfiddle.net/sfwr750n/
这是 regex101 https://regex101.com/r/dxGFNN/1 的链接

一开始我以为只是node.js的问题,但是Chrome也有同样的问题(没有尝试firefox,上次我检查它不支持命名组),更令人困惑的是regex101匹配所有内容正如预期的那样。

最佳答案

您的正则表达式使用 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;
}

我建议您不要使用 g 标志,并且一定在开头和结尾使用 anchor ,以便匹配整个字符串。或者,如果您要在较大的文本 block 中查找这些字符串,请确保在开始搜索新的文本 block 时在正则表达式上设置 lastIndex = 0,这样就不会从之前中断的地方继续。

关于javascript - JS RegEx 即使应该匹配也不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55077796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com