如何检查所选的正则表达式单词是否包含子字符串?

时间:2018-04-25 15:05:02

标签: regex

我创建了一个匹配.vue组件的正则表达式。

它应匹配具有Async结尾的基本名称的所有组件。因此,所有.vue组件都应匹配,但文件名(不带扩展名)的组件除以Async结尾。

所以这些不应该匹配

./deals/deal/countdown/CountdownWarningAsync.vue
./test/deal/countdown/SomeComponentAsync.vue

这些应该。

./deals/deal/countdown/AsyncCountdownWarning.vue
./deals/deal/countdown/SomeComponent.vue    
./recenthotels/RecentHotels.vue

我知道如何在没有Async部分的情况下捕获它,但如何检查以Async结尾的基本名称

Passing tests in Rubberduck test explorer

3 个答案:

答案 0 :(得分:0)

JS不支持lookbehinds或说实话,它在Google Chrome的V8引擎上有一个不成熟的实现,但其他主流浏览器还没有这样做。

使用否定前瞻:

\/[A-Z](?!\w*Async\.vue$)\w+\.vue$

Live demo

正则表达式细分:

  • \/[A-Z]匹配/和大写字母
  • (?!开始否定前瞻
    • \w*匹配以下字母
    • Async\.vue$直到此
  • )前瞻结束
  • \w+匹配单词字符
  • \.vue$最多.vue分机

答案 1 :(得分:0)

如果您只想匹配filename without extension,可以试试这个,

[^\/]*(?<!Async)(?=\.vue)

Demo

答案 2 :(得分:-1)

使用此正则表达式

\w+(?<!Async)\.vue

见这里:

  

https://regex101.com/r/eBPCpb/1