2014-08-28 2 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+\])? является необязательным + поглощает все символы, даже если есть [Some Text] [0] или нет

Я также попытался string.replace(/(\[)\d+(\]:[^\\[]+)(\[.*?\]\[\d+\])?/, "$11$2"); это работало, но если есть [перед тем [Some Text ] [0] + остановка соответствие

и я также попытался это string.replace(/(\[)\d+(\]:.+)(?!\[.*?\]\[\d+\])/, "$11$2"); но опять + потребляет все,

есть ли способ, чтобы соответствовать каждому символу, включая [, пока [Some Text][0]?

+0

Изменить все '\ [\ d + \]' в '[1]', если строка соответствует 'somelink.com'? Как насчет [этой скрипки] (http://jsfiddle.net/x6mn1387/) –

+0

Из вашего регулярного выражения похоже, что вы пытаетесь изменить [0] http на '[1] http' и удалить '[Some Text] [ 0] «Почему это двусмысленно? Кроме того, это пример целой строки? – sln

+0

@Jonny 5 Я использовал 'd' becouse это может быть любое число – MOD

ответ

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

Это соответствует обоим.

См. Демонстрационную версию.

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

+0

' (\ [) \ d + (\]: \ s * http. *?) (? = (\ [. *? \] \ [\ d + \]) | $) 'с группами захвата для вопроса замены OP. – Tensibai

Смежные вопросы