Javascript正则表达式负向回顾后发现的替代方案

5

看起来这不是第一次讨论“后顾”问题,但我没有找到答案。

Javascript没有(正向|反向)后顾请求。

我需要一个正则表达式,匹配*.scss文件名,但不匹配像*.h.scss这样的名称。通过后顾请求,它看起来像:

/(?<!(\.h))\.scss$/

我如何在javascript中实现这个? 我需要将此正则表达式用于webpack规则中的“测试”参数,因此只需要javascript正则表达式。

有人可以回答以下问题吗:https://stackoverflow.com/q/59403483/11264185 - Shivam Poojara
请参见 https://dev59.com/XnRB5IYBdhLWcg3wXmVI - cmbuckley
2个回答

6

您可以使用

/^(?!.*\.h\.scss$).*\.scss$/

请查看正则表达式演示

细节说明

  • ^ - 字符串开头锚点
  • (?!.*\.h\.scss$) - 负向前瞻,如果字符串以.h.scss结尾,则匹配失败
  • .* - 任意0+个字符,尽可能多地匹配
  • \.scss - 包含.scss子串的...
  • $ - 字符串结尾。

4
您可以列出所有不匹配.h的可能子模式,并构建一个备选项:
/(?:[^.].|\.[^h]|^.?)\.scss$/

谢谢您的回复,这个解决方案也可以,但是 Wiktor Stribiżew 的答案更容易理解。 - Jonik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接