2014-02-20 53 views
0

我試圖發展自己的鏈接語法例如:正則表達式來獲得鏈接,鏈接描述

[this is google|google.com] 

我知道怎麼弄(\[(.*?)\])方括號之間的文字,但我不確定如何提取單個作品。另外,如果有人想簡單地添加沒有鏈接的方括號(例如[this is google]),它將不會被檢測爲鏈接。

任何人都可以提供一些方向嗎?我需要訪問這兩個部分。

回答

0

在這裏你去:

\[(.*?)\|(.*?)\] 

基本上,只要增加一個捕獲組。 \|以您奇妙的語法轉義出|。 :)

http://regex101.com/r/dS3uJ9

+0

謝謝! ...現在很明顯,我已經看到它*失望地搖了搖頭* – SeanWM

0

您可以使用;

s='[this is google|google.com]'; 
m = s.match(/\[([^|]+)\|([^\]]+)\]/); 

然後使用m[1]m[2]的介紹和鏈接。

UPDATE:對於顯示出這兩種正則表達式的方法的性能之間的差異,我創建2個regex101鏈接:

  1. http://regex101.com/r/xZ6nB7(使用否定)
  2. http://regex101.com/r/rI0eH8(使用惰性限定符.*?

要查看性能差異點擊Launch regex debugger左上角的鏈接兩個環節。

你會發現我正則表達式顯示:

+匹配1 - 11成品步驟

.*?鏈接顯示此:

+ 1場 - 完成了59步驟

那pro ves指出基於否定的正則表達式比.*方法更有效率。

PS:如果你點擊+Match 1 - finished in 59 steps你會看到紅色在第二環節BACKTRACK消息。

+0

謝謝,你能解釋一下你的嗎?就像你爲什麼不使用'(。*?)'? – SeanWM

+0

'。*?'是非貪婪的正則表達式無法匹配基於否定的正則表達式的效率,即'[^ |] +' – anubhava

+0

什麼是基於否定的正則表達式? – Jeff

0

不是這樣嗎?試試這個正則表達式

(\[(.*?)\|?(.*?)\])