Вход

Просмотр полной версии : Вопрос по регулярному выражению


ruslan_mart
09.02.2015, 14:44
В общем, такое дело...
Сделал парсер CSS-кода для подсветки синтаксиса:
http://savepic.su/4920924.png

Собираюсь делать аналогичный для JavaScript кода.
Интересует вопрос, как правильно через регулярку исключить парсинг в кавычках?
Допустим у меня есть некий JS код:
function test() {
return 'foo';
}

var testStr = 'function test(){return \'foo\'}';

И регулярка, которая обернёт все "function" в <span class="color-pink"></span>.
В данном случае действие применится и к строке. Как более грамотно исключить парсинг строк в кавычках? Кавычки могут быть как двойные, так и одинарные, ещё нужно учесть, что кавычка не экранирована.

Всем спасибо за ответы.:thanks:

ksa
09.02.2015, 15:03
Как более грамотно исключить парсинг строк в кавычках?
Мы, в свое время, просто "прятали" строковые константы... Т.е. меняли их на некие уникальные выражения. Типа

function test() {
return 'foo';
}

var testStr = 'function test(){return \'foo\'}';

Превращали в

function test() {
return 'foo';
}

var testStr = ~1~;

А после расскрасски или форматирования текста вставляли строки вместо их "идентификаторов"...

ruslan_mart
09.02.2015, 15:13
ksa, есть идея все строки оборачивать в какой-нибудь <span class="code-string"></span>

И в CSS прописывать:
.code-string, .code-string * {
color: green !important;
}

Т.е., вся строка будет одноцветной, не зависимо от внутренних элементов.
Но мне кажется, что это немного извращённо. :)

Aetae
09.02.2015, 15:29
http://javascript.ru/forum/project/47593-escaper-mikrobiblioteka-dlya-ehkranirovaniya-literalov.html
Т.е., вся строка будет одноцветной, не зависимо от внутренних элементов.
Но мне кажется, что это немного извращённо. :)
А если в строке закрывающая скобка например?) Не так всё просто.

ksa
09.02.2015, 15:35
вся строка будет одноцветной, не зависимо от внутренних элементов.
Но мне кажется, что это немного извращённо
Так это же строка... Она вся т.с. "однородная". Просто некая последовательность символов...