static/ext/src/ux/AceEditor.js
function string(state) {
        return [
            {
            token : "string",
            regex : '".*?"'
        }, {
            token : "string", // multi line string start
            regex : '["].*$',
            next : state + "-qqstring"
        }, {
            token : "string",
            regex : "'.*?'"
        }, {
            token : "string", // multi line string start
            regex : "['].*$",
            next : state + "-qstring"
        }]
    }
function string(state) {
        return [
            {
            token : "string",
            regex : '".*?"'
        }, {
            token : "string", // multi line string start
            regex : '["].*$',
            next : state + "-qqstring"
        }, {
            token : "string",
            regex : "'.*?'"
        }, {
            token : "string", // multi line string start
            regex : "['].*$",
            next : state + "-qstring"
        }]
    }
regexp must not have capturing parentheses regexps are ordered -> the first match is used