Regex, чтобы заменить скобки квадратной скобкой - PullRequest
2 голосов
/ 09 ноября 2011

Мне нужно преобразовать некоторые переменные, которые используют скобки вместо скобок в файле Javascript.Например, MyVariable (i) должен быть MyVariable [i].

Я использую инструмент Найти и заменить в Visual Studio с этим регулярным выражением:

MyVariable\({(.+)}\)

и замените на:

MyVariable\[\1\]

Это прекрасно работает для таких случаев, как:

asdas.MyVariable(i+1)
asdas.MyVariable(i)
asdas.MyVariable(i).asd
MyVariable(i+1)

Но не работает для таких случаев, как

if (parseInt(OtherObject.MyVariable(i+1).Dest.XYZ)==SINK_STATE_TYPE || OtherObject.MyVariable(i).X == "ok")

Последняя будет брать первые скобки и последнюю строку и вести себя странно.Что мне нужно изменить в Regex, чтобы он работал со строкой, состоящей из нескольких скобок.

1 Ответ

5 голосов
/ 09 ноября 2011

Ваш шаблон жадный. Часть (.+) соответствует всему, включая закрывающую скобку ), пока не достигнет последнего ) символа. Чтобы сделать его не жадным, вы можете использовать # вместо +, что означает «сопоставить одно или несколько вхождений предыдущего выражения и сопоставить как можно меньше символов». В .NET это обычно выполняется путем добавления ? после него, такого как .+?, но разновидность регулярных выражений Visual Studio отличается и использует вместо нее метасимвол #.

Обновленный шаблон становится:

MyVariable\({(.#)}\)

Вы также можете использовать [^)]+, который соответствует любому символу, который не является ). Когда он встречает ), он прекращает сопоставление. Этот альтернативный шаблон:

MyVariable\({([^)]+)}\)

Если вы знакомы с разновидностью регулярных выражений .NET, вас может заинтересовать Power Tools для повышения производительности Visual Studio 2010 , которая расширила поиск и замену, чтобы разрешить добавление регулярных выражений в .NET б.

...