Кажется, я не могу найти пример использования совпадений RegEx для создания наложения в CodeMirror. Пример Усы, сопоставляющий одну вещь за раз, кажется достаточно простым, но в API говорится, что соответствие RegEx возвращает массив совпадений, и я не могу понять, что с ним делать в контексте структуры в примере с усами.
У меня есть регулярное выражение, которое находит все элементы, которые мне нужно выделить: я протестировал его, и оно работает.
Должен ли я загружать массив вне функции токена, а затем сопоставлять каждый из них? Или есть способ работать с массивом?
Другая проблема заключается в том, что я хочу применить разные стили в зависимости от параметра (biz | cms) в регулярном выражении - один для «biz», а другой для «cms». Будут и другие, но я стараюсь не усложнять.
Это все, что у меня есть. Комментарии показывают мое замешательство.
CodeMirror.defineMode("tbs", function(config, parserConfig) {
var tbsOverlay = {
token: function(stream, state) {
tbsArray = match("^<(biz|cms).([a-zA-Z0-9.]*)(\s)?(\/)?>");
if (tbsArray != null) {
for (i = 0; i < tbsArray.length; i++) {
var result = tbsArray[i];
//Do I need to stream.match each element now to get hold of each bit of text?
//Or is there some way to identify and tag all the matches?
}
}
//Obviously this bit won't work either now - even with regex
while (stream.next() != null && !stream.match("<biz.", false)) {}
return null;
}
};
return CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), tbsOverlay);
});