2017-05-12 132 views
1

我在下面的格式字符串,並希望使用正則表達式來捕獲/d//edit之間的部分:查找的字符串通過正則表達式(JavaScript的)隨機字符串

/presentation/d/1JHjE6pWJRujtMQaXcL92HBD8ZKq35au8moEv_zP2D_-0/edit 

當我使用這個(\/d\W)(.*)\b\/,我'能夠捕獲/d/1JHjE6pWJRujtMQaXcL92HBD8ZKq35au8moEv_zP2D_-0/;不是我需要的實際部分(嚴格來說是/d//edit之間的字符串)。

我該如何做到這一點?

+0

爲什麼不只是搜索確切的字符串?我想象會更容易 –

回答

0

TL; DR

只要你總有你想要一個/d//edit之間得到的字符串,你可以用這個正則表達式捕捉到它:(.*\/d\/)(.*)(\/edit.*);它應該是第二組。

下面是你如何能得到它的一個例證:

var data = "/presentation/d/1JHjE6pWJRujtMQaXcL92HBD8ZKq35au8moEv_zP2D_-0/edit"; 
 
my_preferred_string = data.match(/(.*\/d\/)(.*)(\/edit.*)/)[2]; 
 
console.log(my_preferred_string);


解釋正則表達式,/(.*\/d\/)(.*)(\/edit.*)/g

在這裏,我們有三組;這些組被限制在括號內,如:(the group elements),其中組元素代表期望的匹配。

第一組被捕獲(.*\/d\/)

在該組的表達式中,.*用於捕獲除行終止符以外的任何字符。在同一部分,我們已經使用量詞*來進行零次和無限次匹配,儘可能多次。然後,\/作爲匹配的/字符(大小寫敏感的),其中,前述\是轉義,後面跟有字母d(區分大小寫,以特異性d作爲一個字符匹配)時,並用\/結束,只是如之前的d

第二組是我們感興趣的實際部分,用(.*)捕獲,其中.*正如上面在捕獲前面的表達式時所解釋的那樣。

的第三組被捕獲與(\/edit.*),其中\/.*同等地與上述(第1組)中說明,並且edit作爲字符匹配編輯(區分大小寫)。

最後,g是一個標誌(全局模式標誌)。它幫助我們獲得所有比賽,並且在我們得到我們的正則表達式的第一場比賽後不會返回。

0

嘗試使用以下模式:

/presentation/d/(.*?)/edit 

var input = '/presentation/d/1JHjE6pWJRujtMQaXcL92HBD8ZKq35au8moEv_zP2D_-0/edit'; 
 
var rx = /\/presentation\/d\/(.*?)\/edit/g; 
 
var arr = rx.exec(input); 
 
console.log(arr[1]);

演示在這裏:

Rextester

相關問題