javascript - 如何在javascript中使用正则表达式捕获以某种字符串开头和结尾的字符串

标签 javascript regex

'\u001b[1m\u001b[31m  \u001b[1m● \u001b[1mregister page › register-automated › desktop › CONTROL\u001b[39m\u001b[22m\n\n    Expected image to match or be a close match to snapshot but was 0.009980258828690502% different from snapshot (91 differing pixels).\n    \u001b[1m\u001b[31mSee diff for details:\u001b[39m\u001b[22m \u001b[31m/src/pages/__image_snapshots__/__diff_output__/register-test-js-register-page-register-automated-desktop-control-1-diff.png\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m    \u001b[0m \u001b[90m 60 | \u001b[39m\u001b[0m\u001b[22m\n\u001b[2m    \u001b[0m \u001b[90m 61 | \u001b[39m          \u001b[36mconst\u001b[39m image \u001b[33m=\u001b[39m await page\u001b[33m.\u001b[39mscreenshot({ fullPage\u001b[33m:\u001b[39m isFullPage })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m    \u001b[0m\u001b[31m\u001b[1m>\u001b[2m\u001b[39m\u001b[90m 62 | \u001b[39m          expect(image)\u001b[33m.\u001b[39mtoMatchImageSnapshot({threshold\u001b[33m:\u001b[39m \u001b[35m0.3\u001b[39m})\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m    \u001b[0m \u001b[90m    | \u001b[39m                        \u001b[31m\u001b[1m^\u001b[2m\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m    \u001b[0m \u001b[90m 63 | \u001b[39m        })\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m    \u001b[0m \u001b[90m 64 | \u001b[39m\u001b[0m\u001b[22m\n\u001b[2m    \u001b[0m \u001b[90m 65 | \u001b[39m        \u001b[36mif\u001b[39m(experimentName \u001b[33m||\u001b[39m experiementVariationName) {\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m      \u001b[2mat Object.toMatchImageSnapshot (\u001b[2msrc/command/getPageImageShot.js\u001b[2m:62:25)\u001b[2m\u001b[22m\n'

如何从这个乱码中捕获/src/pages/__image_snapshots__/__diff_output__/register-test-js-register-page-register-automated-desktop-control-1-diff.png

我尝试 .match(/\bdetails\.\w+png\b/) 来捕获 ...detail: 末尾和.png 字符串结尾,但进展不顺利,只是一直返回 null。我想这样做,是因为 See diff for details: 之后和 .png 之前的所有内容都可以是不同的文本...

最佳答案

您可以使用捕获组来获取路径并在详细信息后添加冒号 :

\bdetails:.*?(\/.*?\.png\b)
  • \bdetails: 匹配单词边界和详细信息:
  • .*? 匹配任意字符 0+ 次非贪婪(如果中间没有正斜杠,您还可以使用否定字符类 [^\/]*
  • ( 捕获组
    • \/.*?\.png\b 匹配任何非贪婪字符和 .png 以及单词边界
  • ) 关闭捕获组

在替换中使用$1/

查看regex demo

const regex = /\bdetails:.*?(\/.*?\.png\b)/;
const str = `'\\u001b[1m\\u001b[31m  \\u001b[1m● \\u001b[1mregister page › register-automated › desktop › CONTROL\\u001b[39m\\u001b[22m\\n\\n    Expected image to match or be a close match to snapshot but was 0.009980258828690502% different from snapshot (91 differing pixels).\\n    \\u001b[1m\\u001b[31mSee diff for details:\\u001b[39m\\u001b[22m \\u001b[31m/src/pages/__image_snapshots__/__diff_output__/register-test-js-register-page-register-automated-desktop-control-1-diff.png\\u001b[39m\\n\\u001b[2m\\u001b[22m\\n\\u001b[2m    \\u001b[0m \\u001b[90m 60 | \\u001b[39m\\u001b[0m\\u001b[22m\\n\\u001b[2m    \\u001b[0m \\u001b[90m 61 | \\u001b[39m          \\u001b[36mconst\\u001b[39m image \\u001b[33m=\\u001b[39m await page\\u001b[33m.\\u001b[39mscreenshot({ fullPage\\u001b[33m:\\u001b[39m isFullPage })\\u001b[33m;\\u001b[39m\\u001b[0m\\u001b[22m\\n\\u001b[2m    \\u001b[0m\\u001b[31m\\u001b[1m>\\u001b[2m\\u001b[39m\\u001b[90m 62 | \\u001b[39m          expect(image)\\u001b[33m.\\u001b[39mtoMatchImageSnapshot({threshold\\u001b[33m:\\u001b[39m \\u001b[35m0.3\\u001b[39m})\\u001b[33m;\\u001b[39m\\u001b[0m\\u001b[22m\\n\\u001b[2m    \\u001b[0m \\u001b[90m    | \\u001b[39m                        \\u001b[31m\\u001b[1m^\\u001b[2m\\u001b[39m\\u001b[0m\\u001b[22m\\n\\u001b[2m    \\u001b[0m \\u001b[90m 63 | \\u001b[39m        })\\u001b[33m;\\u001b[39m\\u001b[0m\\u001b[22m\\n\\u001b[2m    \\u001b[0m \\u001b[90m 64 | \\u001b[39m\\u001b[0m\\u001b[22m\\n\\u001b[2m    \\u001b[0m \\u001b[90m 65 | \\u001b[39m        \\u001b[36mif\\u001b[39m(experimentName \\u001b[33m||\\u001b[39m experiementVariationName) {\\u001b[0m\\u001b[22m\\n\\u001b[2m\\u001b[22m\\n\\u001b[2m      \\u001b[2mat Object.toMatchImageSnapshot (\\u001b[2msrc/command/getPageImageShot.js\\u001b[2m:62:25)\\u001b[2m\\u001b[22m\\n'`;
console.log(str.replace(regex, "$1/"));

感谢@VLAZ帮助解决问题。

关于javascript - 如何在javascript中使用正则表达式捕获以某种字符串开头和结尾的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56136571/

相关文章:

javascript - 更改字段值时如何运行函数?

javascript - 简单的 jQuery 选择器不起作用

javascript - 密码正则表达式

用于用户名验证的正则表达式模式

c# - Windows Server 2008 上的正则表达式速度慢

python - 在python中删除句子末尾的句号

ios - 你如何确认一个字符串只包含 Swift 中的数字?

javascript - 为什么阴影在 Three.js 中变得模糊

javascript - React Google map API initMap 不是函数,没有包

javascript - 如何修复 "no-param-reassign"eslint 错误?