2017-05-17 34 views
1

我目前正試圖將以下情況與正則表達式匹配。正則表達式匹配否定集合後的詞

當前正則表達式

\.\/[^/]\satoms\s\/[^/]+\/index\.js

案件

// Should match 
./atoms/someComponent/index.js 
./molecules/someComponent/index.js 
./organisms/someComponent/index.js 

// Should not match 
./atomsdsd/someComponent/index.js 
./atosdfms/someComponent/index.js 
./atomssss/someComponent/index.js 

然而沒有一例是匹配的,我究竟做錯了什麼?

+0

@anubhava在javascript中使用它,通過https:// regex101進行測試。com/ – NealVDV

+0

正則表達式中的'\ s'標記聲明*必須*在斜槓和文本字符串「atom」之間有空格字符,這不是你想要的,基於你的例子。 –

+0

'someComponent/index.js',我的不好 – NealVDV

回答

2

希望這會幫助你。你添加了一些額外的字符,讓你的正則表達式失敗。

正則表達式:\.\/(atoms|molecules|organisms)\/[^\/]+\/index\.js

1.\.\/這將匹配./

2.(atoms|molecules|organisms)這將匹配atomsmoleculesorganisms

\/[^\/]+\/這將匹配/然後直到/

4.index\.js這將匹配index.js

Regex demo

+0

太棒了!看到我更新的問題,忘記包含兩個我想在同一行匹配的單詞(如果可能的話)。非常感謝! – NealVDV

+1

@NealVDV我也更新了我的帖子。 –

+1

@NealVDV我想我的更新後的文章會幫助你.. –

0

嘗試以下操作:

\.\/(atoms|molecules|organisms)\/[a-zA-Z]*\/index\.js 

正斜槓(和其他特殊字符)應該用斜槓\轉義。

  1. \.\/(atoms|molecules|organisms)\/匹配 '.atoms /' 或.moleculesorganisms嚴格。如果沒有括號,它會匹配部分字符串。 |是一種交替運算符,它可以匹配左側或右側的所有內容。
  2. [a-zA-Z]*將在任何情況下匹配任何長度的字符串。 a-z佔小寫,而A-Z佔大寫。 *表示一個或多個字符。根據someCompenent中可能包含的字符,您可能需要使用[a-zA-Z\d]*來計算數字。
  3. \/index\.js將匹配 '/index.js'
1

爲什麼不只是這simpler pattern

\.\/(atoms|molecules|organisms)\/.*?index\.js 
+1

我不確定我是否會遇到這個問題,但'./atoms ///////// someComponent/index.js'仍然匹配,不應該。 :) – NealVDV