gpt4 book ai didi

javascript - 如何使用否定前瞻(NOT lookbehind)来匹配在特定位置不包含给定子字符串的字符串?

转载 作者:行者123 更新时间:2023-12-05 01:57:08 26 4
gpt4 key购买 nike

我想将某些文件类型(例如“.txt”)与不以特定子字符串结尾的非空根名称(例如“-bad”)匹配。有了负后视支持,解决方案很简单:

/.(?<!-bad)\.txt$/

但是,Safari 仍然 不支持负面回顾。啊。我如何使用负前瞻获得相同的结果?我想用一个正则表达式来做到这一点。请不要提供任何非正则表达式或多步骤解决方案。

下面的测试代码显示我很接近,但一个测试仍然失败。 😕

const regex = /.((?!-bad).{4})\.txt$/;
const tests = [
['this-file-bad.txt', false],
['this-file.txt', true],
['.txt', false],
['f.txt', true]
];

const results = tests.map(([input, expected]) => ((regex.test(input) === expected) ? '✅' : '❌') + input);
console.log(results.join('\n'));

最佳答案

你可以使用

^(?!.*\-bad\.txt$).+\.txt$

Demo1

正则表达式如下:

  • 匹配字符串开头(^)
  • 使用负前瞻 ((?!...)) 断言字符串不以“-bad.txt”结尾
  • 匹配一个或多个字符,后跟字符串末尾的“.txt”。

要同时检查多个文件是否足够(根据您在下面的评论,这可能会有所帮助)您可以这样写,例如:

^(?=.*\.(txt|pdf|csv|docx|html|jpeg)$)(?!.*\-bad\.\1$).+\.\1$

开头的正先行的唯一目的是捕获字符串末尾的文件后缀,以便可以在负先行和末尾使用反向引用。

Demo2

关于javascript - 如何使用否定前瞻(NOT lookbehind)来匹配在特定位置不包含给定子字符串的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69469047/

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