Основной рецепт для регулярного выражения, который соответствует всем словам, кроме foo
(в синтаксисе регулярных выражений Vim):
/\<\%(foo\>\)\@!\k\+\>/
Обратите внимание, что отрицательное предпросмотр (\@!
) нуждается в конечном утверждении(здесь: \>
) сам по себе, во избежание исключения из него всего, что начинает с выражения!
Применяется к вашим примерам (исключая if
(потенциально с пробелами)), console.log
и function
, оканчивающиеся на (
), что дает:
\<\%(\%(if *\|console\.log\|function\)(\)\@!\(\k\|\.\)\+\>(.*)
Как вы, кажется, хотите включить всю цепочку объектов (поэтому JSON.parse
вместо *)1019 *), фактическое совпадение включает в себя как ключевые слова (\k
), так и точку.Есть одно осложнение: отрицательный прогноз будет фиксироваться на log()
в console.log()
, потому что там также совпадает утверждение границы ведущего ключевого слова (\<
).Мы можем запретить это совпадение, также исключив точку непосредственно перед функцией;то есть, поместив \.\@<!
между:
\<\%(\%(if *\|console\.log\|function\)(\)\@!\.\@<!\(\k\|\.\)\+\>(.*)
Это выделит только следующие вызовы:
JSON.parse(localStorage["beards"])
BLAH.blah.somefunc(arge, arg,arg);
foo.log(asdf)