如何使用ace编辑器突出显示多个单词?

时间:2013-11-19 15:13:01

标签: jquery regex highlight ace-editor

我有一个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编辑器一起工作。也许有人之前做过这个或者可以给我一个简单的例子?我尝试了这个文档(https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode),但无法理解它。如果这是正确的起点,我甚至不确定。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

var keywords = /word1|word2/g

在Javascript中,正则表达式不是用引号括起来的,而是用分隔符(我使用/),并在第二个分隔符后出现标记。

g是全局标志,因此整个编辑器中的正则表达式将匹配多次。

您还可以使用问题中的keywords变量使用:

var keywords = new RegExp(keywords, 'g');