2010-04-23 6 views
3

Мне нужно найти все строки без заданной строки перед ней.Regex: Найти/заменить все подстроки без данной строки раньше?

Например:

Find: "someValue" 

** Все результаты с "функции (" перед ними следует игнорировать

Визуальная Студия регулярное выражение бы найти эту:

value = someValue 

И Игнорировать что-то похожее на это:

function(someValue) 

Каков наилучший способ для этого?

Спасибо за помощь!

ответ

2

Вы можете использовать негативный взгляд-за:

(?<!function\()someValue 
2

Вы сказали

Регулярное выражение Visual Studio найдет это:

В сочетании с названием вашего вопроса, что заставляет меня думать, что вы пытаетесь что-то сделать в диалоговом окне поиска и замены в Visual Studio, вместо того, чтобы использовать регулярное выражение в приложении.

Если это так, то я думаю, вам может быть не повезло; Регулярные выражения Visual Studio не очень мощные, и они имеют довольно странный синтаксис, который, похоже, не используется нигде!

Мой совет должен был либо использовать другой текстовый редактор, либо использовать регулярное выражение, описанное SilentGhost в приложении .NET (или сценарии PowerShell), чтобы выполнить замену для вас. Когда мне нужно делать регулярные выражения в редакторе, а Studio не режет его, я предпочитаю использовать TextPad. Это не очень красиво, но оно мощное и имеет отличную поддержку макросов.

Кстати, если вы хотите использовать PowerShell, чтобы сделать это, это будет искать foo.js и скопировать вывод в fooNew.js:

(get-content D:\junk\foo.js) -replace 
    '(?<!function\()someValue', 'someOtherValue' > D:\junk\fooNew.js 
Смежные вопросы