Регулярное выражение для определения операторов if без скобок

#regex

#регулярное выражение

Вопрос:

Я пытаюсь создать регулярное выражение для обнаружения операторов if без скобок в Javascript из традиционных операторов if.

Я пытаюсь обнаружить такие операторы, как этот:

 if (foo) doSomething(); 
  

без обнаружения следующего оператора:

 if (foo) {
    doSomething();
}
  

До сих пор я придумал следующее выражение: if(s*)(.*)s(?!{) которое позволяет мне обнаруживать большинство операторов if без скобок, нечувствительных к пробелам между if и условием.

Однако это выражение также запускается для операторов, подобных следующему, из-за закрывающей круглой скобки вызова функции:

 if (foo()) {
    doSomething();
}
  

Есть ли способ предотвратить это или это принципиально невозможно?

Комментарии:

1. Вероятно, вам лучше использовать существующий анализатор javascript, но для решения вашей непосредственной проблемы вы могли бы соответствовать if[^{]*$ . Это также будет соответствовать условиям if с многострочными условиями, которые в любом случае выполняло ваше текущее регулярное выражение.

Ответ №1:

Что-то вроде /if.*)s*(?!{)s*ns*(?!{)/gm

Конечно, оно все равно будет соответствовать строкам, JSX и так далее