sorry_i_noob
@sorry_i_noob

Можно ли написать регулярку, которая будет проверять, закрыта ли кавычка (двойная и (или) одинарная) в случае, если вообще она (кавычка) есть?

Здравствуйте.

Можно ли написать регулярку, которая будет проверять, закрыта ли кавычка (двойная и (или) одинарная) в случае, если вообще она (кавычка) есть?

Моя задача - удалить переменные из кода. Я знаю, с чего начинаются переменные (с модификаторов и имени), а вот чем заканчиваются - не знаю. Точка с запятой может ведь быть частью значения переменной (если переменная хранит строку).

Я хочу с помощью регулярок смотреть - если строка начата (есть открывающая двойная или одинарная кавычка), то точка с запятой не является концом объявления переменной и нужно продолжать поиск конца переменной.
  • Вопрос задан
  • 216 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev
software engineer
Регулярки не смогут разобраться с множественными и вложенными кавычками.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
erge
@erge
Примус починяю
я так понимаю что вопрос у вас поставлен неверно, если - "Моя задача - удалить переменные из кода."
и судя по тексту -
"которая будет проверять, закрыта ли кавычка (двойная и (или) одинарная)"
"Точка с запятой может ведь быть частью значения переменной (если переменная хранит строку). "
удалять вы собираетесь все строковые переменные?

тогда вам необходимо матчить (находить) строковые переменные, а не проверять есть ли , нет кавычки и пр. Вопрос некорректно поставлен!?

вот регулярка, матчит строковые переменные как начинающиеся, так и без модификаторов (можете добавить свои по вкусу), в данном случае это модификаторы JavaScript const, var, let:
((const|var|let)\s+)?([\w]+)\s*=\s*("[^"]+");?


PS: работает в NotePad++
то что попадает внутрь () запоминается в переменные \1 \2 \3 \4
\3 - название переменной
\4 - собственно сама строка

Upd:
выше написал пример с двойными кавычками "
для апострофов проще сделать такую же регулярку заменив в регулярке выше двойные на апострофы и использовать два регулярных выражения, чем городить и пытаться все сделать на одной регулярке.
ведь если строка в апострофах, то внутри свободно могут быть кавычки двойные, в этом случае...... думаю регулярку то можно написать, но уж сильно сложнее и запутаннее будет.

Upd2:
хотя нет, не сильно сложнее :)
((const|var|let)\s+)?([\w]+)\s*=\s*("[^"]+"|'[^']+');?


Upd3:
если в конце всегда будет ; и перенос строки
то можно так:
((const|var|let)\s+)?([\w]+)\s*=\s*(".*"|'.*');$
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы