Если вы ищете что-то, что будет работать 100% времени, вам нужен синтаксический анализатор языка.
Однако, если я прав, что вы просто пытаетесь выполнить поиск / замену большого массива кода, поэтому приемлемо что-то более 80% (и вы можете исправить все, что пойдет не так), тогда что-то вроде следующего должно соответствовать вашим потребностям:
([a-zA-Z]\w+|[)])(\s*==\s*("[^"]*"|\w+)(?=\s*[|;&)]))
Вы можете использовать групповые ссылки в вашей строке замены, чтобы получить содержимое ваших групп, что позволит вам сохранить соответствующие данные. Как это:
$1.equals($3)
Это преобразует некоторый код следующим образом:
if ( foo == "bar" || foo == baz && foo == baz + 1 /*right hand side too complex*/ && bar == baz ){
foo = baz( "bat" ) == bar;
foo = bar == baz( "bat" ); // right hand side is too complex
bar = 77 == 99; // left hand side is not a variable
bar = bat == 99;
bar = bat == 99.0; // floats not supported
}
В это:
if ( foo.equals("bar") || foo.equals(baz) && foo == baz + 1 /*right hand side too complex*/ && bar.equals(baz) ){
foo = baz( "bat" ).equals(bar);
foo = bar == baz( "bat" ); // right hand side is too complex
bar = 77 == 99; // left hand side is not a variable
bar = bat.equals(99);
bar = bat == 99.0; // floats not supported
}
Вот демонстрация: https://regexr.com/461lm
Обратите внимание, что это не пытается делать более сложные замены, где правая часть ==
является выражением, но оно будет обрабатывать простые переменные, строки и целые числа.