У меня есть поле формы textarea. Я бы хотел, чтобы редактор ace сразу выделял все вхождения определенных предопределенных слов. Передача их в такой массив не работает: editor.findAll("word1","word2","...");
Я думал об использовании регулярных выражений, фильтрующих отдельные слова. Это мой код:
<script type="text/javascript" src="/ace/src-min/ace.js" charset="utf-8"></script>
<script>
// Hook up ACE editor to all textareas with data-editor attribute
$(function () {
$('textarea[data-editor]').each(function () {
var textarea = $(this);
var mode = textarea.data('editor');
textarea.css('visibility', 'hidden');
var editor = ace.edit(edit);
editor.renderer.setShowGutter(false);
editor.getSession().setValue(textarea.val());
editor.getSession().setMode("ace/mode/" + mode);
editor.getSession().setUseWrapMode(true); // adds vertical scrollbar
var keywords = "word1|word2";
keywords = new RegExp(keywords);
editor.findAll(keywords,{
//caseSensitive: false,
//wholeWord: true,
regExp: true
});
});
});
</script>
К сожалению, это ничего не делает. Может быть, я пропускаю какую-то библиотеку? Я получил регулярные выражения, работающие с codemirror (http://codemirror.net/), но хотел дать ace-editor пытаться. Видимо это как-то работает:
var highlightWords = "word1|word2|word3|phrase one|phrase number two|etc";
var keywordMapper = this.createKeywordMapper({
"highlightWords": highlightWords
}, "identifier", true);
Но, честно говоря, я не знаю, как собрать все эти кусочки вместе и заставить их работать. В основном я хочу передать список предопределенных слов ace, чтобы они были выделены. Если я не ошибаюсь, мне нужно настроить собственное правило подсветки для этого, а затем заставить их работать с ace-editor. Может быть, кто-то делал это раньше или мог бы привести простой пример? Я пробовал эту документацию (https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode), но не вижу в этом никакого смысла. Я даже не уверен, является ли это правильной отправной точкой.
var keywords = /word1|word2/g
(без кавычек) или то же самое безg
? - person OGHaza   schedule 22.11.2013var keywords = /word1|word2/g
(без кавычек) работает просто отлично. Тем не менее, глобальный параметр соответствияg
был решающим моментом. Безg
правильно выделяется только первое совпадение/word1|.../g
, все остальные совпадения одного и того же слова/word1|.../g
выделяются менее отчетливо, тогда как все остальные слова/...|word2|etc./g
вообще не выделяются. Но почему это не работает с кавычками (я думал, чтоnew RegExp(keywords)
позаботится об этом? В любом случае, большое спасибо за ваше предложение. Вы сэкономили мне много времени. - person Jörg   schedule 22.11.2013RegExp(..)
, хотя, честно говоря, я не слишком уверен. - person OGHaza   schedule 22.11.2013keywords = new RegExp(keywords);
. - person Jörg   schedule 22.11.2013