2017-02-24 54 views
0

我正在尋找的正則表達式可以匹配這兩個行後:可選匹配的空間

foo/bar 
foo/bar baz 

和捕獲foobarbaz到單獨的比賽組。

我這個正則表達式的嘗試:

^([^\/]+)\/([^\/#]+)? (\w+)$ 
+0

@Tushar:'^([^ \ /] +)\ /([^ \ /#] +)? (\ w +)$' – bswinnerton

+0

檢查['^(\ w +)\ /(\ w +)\ s *(\ w +)?$'](https://regex101.com/r/QoUYZB/1) – Tushar

+0

它,@Tushar♥️。 – bswinnerton

回答

1

您可以使用下面的正則表達式

^(\w+)\/(\w+)\s*(\w+)?$ 
  1. ^:啓動錨
  2. (\w+):匹配一個或多個單詞字符(字母,數字和下劃線),並將它們添加到捕獲組
  3. \/:匹配正斜槓
  4. \s*:匹配任何數目的空格
  5. (\w+)?:可選的字母數字+下劃線比賽
  6. $:錨結束

這裏的demo上RegEx101.com。

這將在其中可以通過$1,字/後在第二組 - $2和可選字在$3訪問的第一捕獲組/之前匹配第一個字。

如果有其它字符比\w[a-zA-Z0-9_],您可以使用下面的正則表達式

^([^\/]+)\/(\S+)\s*(\S+)?$ 

Demo

[^\/]+將匹配除了/一個或多個字符。 \S+將匹配一個或多個非空格字符。

+0

這是一個超小點,但對於那些想知道正則表達式的每個組件的人來說,這是一個更直觀的改進。請考慮將'\ s *'更改爲'\ s?'。搜索「0到無限」空格是不必要的,因爲提供的樣本字符串中不會有多個空格。 '\ s?'從字面上看0或1個空格。我相信你知道這一點,但是其他對正則表達式不熟悉的人可能不會,所以這是很好的教育資源。 – mickmackusa

1

嘗試使用此^([^\/]+)\/([^\/#]+)\s*(\w*)$gm標誌。

+0

嗯,這似乎並沒有拉'baz'到一行中的匹配組:'foo/bar baz' – bswinnerton

+0

您使用過'gm'標誌嗎? –