【问题标题】:How do I get value from ACE editor without comments?如何在没有评论的情况下从 ACE 编辑器中获取价值?
【发布时间】:2016-04-28 09:22:31
【问题描述】:

是否可以在没有 cmets(单行和多行)的情况下获取 ace 编辑器实例的值? cmets 由跨度类“ace_comment”标识,但我发现提取数据的唯一函数是 getValue()。

简单示例:

console.log("Hello World") //This is a comment.

我得到了什么: 输出:'console.log("Hello World") //这是一条评论。'

我想要的: 输出:'console.log("Hello World")'

扩展示例(多行 + '//' 和 '/* */' cmets):

*/ 这是 评论 */ console.log("这不是评论") // 再次评论

【问题讨论】:

    标签: javascript editor ace-editor


    【解决方案1】:

    您可以使用正则表达式来删除 cmets:

    var string = 'console.log("Hello World") //This is a comment. \n' + 
                 'hello("foo"); /* This is also a comment. */';
    string = string.replace(/\s*\/\/.*\n/g, '\n').replace(/\s*\/\*[\s\S]*?\*\//g, '');
    document.body.innerHTML = '<pre>' + string + '</pre>';

    【讨论】:

    • 谢谢!我希望会有一个内置的解决方案,但这似乎工作正常。
    • @jcubic:"/* remove\nthis multine\ncomment */RETURN 1" 失败。是否可以解决这个问题,并且还支持未封闭的多行 cmets(即匹配到 */ 或输入结束)?
    • 更新了答案,用[\s\S]*?代替.*?
    • [\s\S] 是一个非常巧妙的技巧,因为 JS 中没有 DOTALL 修饰符!这是一个似乎也涵盖了我的特定用例的一些极端情况的正则表达式:var t = "/* remove this\nmulti-line comment */FOR doc IN coll/*\n@ignore @me*/FILTER doc./**/attr = @val//delete me\nSORT doc.foo DESC\n// away with you /*\n&lt;YOU MUST KEEP ME&gt;\n//*/\nRETURN doc\n/* this is // replaced in two steps,\nbut in the end, it's all gone!\n*/\nLIMIT 1\n/* some old\nqueries go here" 删除杂物: t.replace(/\s*\/\/.*\n/g, '\n').replace(/\/\*.*?\*\//g,"").replace(/\s*\/\*[\s\S]*?(\*\/|$)/g, '\n');
    【解决方案2】:

    将是一个更简单的解决方案。像这样修剪//评论

        var str = 'console.log("HelloWorld")//This is a comment';
            str = str.split('//');
    
        //Just to print out
        document.body.innerHTML = '<pre>You provide > '+ str[0]+'//'+str[1] +'</pre><pre>Output > ' + str[0] + '</pre>';

    通过这样做,您将整个字符串通过 '//' 拆分返回一个数组,该数组将具有 [0] = console.log('HelloWorld');和 [1] = '这样评论'。这是我能想到的最简单的解决方案。立方。通过使用正则表达式基本上做同样的事情。好看!

    【讨论】:

    • 对不起,我不够清楚,我需要检测单行 cmets 和多行 cmets 以及全行 cmets 和 cuttet cmets,例如:*/ 这是评论 * /console.log("这不是评论") // 再次评论
    • 我明白 jcubic 的回答是你需要的 :)
    猜你喜欢
    • 2012-02-16
    • 2012-02-06
    • 2023-04-06
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 2013-09-07
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多