Оператор запятой до точки с запятой
У меня есть кусок JavaScript, который имеет много операторов запятой, например
"i".toString(), "e".toString(), "a".toString();
Есть ли способ с JavaScript, чтобы преобразовать их в точки с запятой?
"i".toString(); "e".toString(); "a".toString();
1 ответ
Это может показаться отговоркой... но я бы посоветовал не пытаться. Делать какие-либо манипуляции со строками для изменения было бы практически невозможно. В дополнение к спискам аргументов определения функции, вам также необходимо пропустить текст в строковых литералах или литералах регулярных выражений или вызовах функций, литералах массивов или литералах объектов или объявлениях переменных... возможно, даже больше. Regex не может справиться с этим, включая и выключая, поскольку ключевые слова не справляются с этим.
Если вы хотите на самом деле преобразовать их, вам действительно нужно проанализировать код и выяснить, какие из них являются оператором запятой. Более того, в некоторых случаях присутствие запятой имеет значение:
var a = 10, 20;
это не то же самое, что
var a = 10; 20;
например.
Так что я действительно не думаю, что вы должны попробовать это. Но если вы захотите, я бы начал с поиска синтаксического анализатора javascript (или его написания, он не очень сложный, но, вероятно, занял бы лучшую часть дня и все еще мог бы содержать ошибки). Я уверен, что более продвинутые минификаторы, такие как Google, включают парсер, возможно, их источник поможет.
Затем вы анализируете его, чтобы найти действительные выражения запятой. Если возвращаемое значение используется, оставьте его в покое. Если нет, то замените их выражениями, а затем заново сгенерируйте строку исходного кода. Вы можете пойти дальше и отформатировать его в зависимости от отступа в данный момент. Это может в конечном итоге выглядеть довольно хорошо. Это будет просто кусок работы.
Вот библиотека синтаксического анализатора, написанная на JS: http://esprima.org/ (спасибо @torazaburo за этот комментарий)