2014-08-28 23 views
0

我有這樣的字符串;正則表達式匹配字符串,直到不需要的部分

[0]: http//www.somelink.com[Some Text][0]

[Some Text][0]是可選的。它可以存在或不存在。

我想匹配[0]: http//www.somelink.com 0變爲1

爲此,我使用這個代碼; string.replace(/(\[)\d+(\]:.+)(\[.*?\]\[\d+\])?/, "$11$2");

,但我想becouse (\[.*?\]\[\d+\])?是可選+消耗的所有字符即使[一些文本] [0]或不

我也試過string.replace(/(\[)\d+(\]:[^\\[]+)(\[.*?\]\[\d+\])?/, "$11$2");這個工作,但如果有一個[前[某些文本] [0] +停止匹配

,我也試過這種string.replace(/(\[)\d+(\]:.+)(?!\[.*?\]\[\d+\])/, "$11$2");卻又+消耗一切

有什麼辦法,以每一個字符,包括[匹配,直到[Some Text][0]?

+0

更改所有'\ [\ d + \]''到[1]'如果字符串匹配'somelink.com'? [這個小提琴]怎麼樣(http://jsfiddle.net/x6mn1387/) – 2014-08-28 17:08:41

+0

從你的正則表達式看起來你試圖改變[0] http到'[1] http'並刪除'[一些文本] [ 0]'爲什麼這是模糊的?另外,這是整個字符串的一個例子嗎? – sln 2014-08-28 17:19:17

+0

@Jonny 5我使用'd'因爲它可以是任何數字 – MOD 2014-08-28 17:26:52

回答

0
\[\d+\]:\s*http.*?(?=(\[.*?\]\[\d+\])|$) 

這與兩者都匹配。

查看演示。

http://regex101.com/r/lK9iD2/5

+0

'(\ [)\ d +(\]:\ s * http。*?)(?=( \ [。*?\] \ [\ d + \])| $)'用於OP替換問題的捕獲組。 – Tensibai 2014-08-28 16:52:53