V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cyberpoint
V2EX  ›  问与答

web code editor 中如何实现简单的语法校验

  •  
  •   cyberpoint · 2020-12-16 12:17:09 +08:00 · 1185 次点击
    这是一个创建于 1438 天前的主题,其中的信息可能已经有所发展或是发生改变。

    div添加contentEditable属性支持编辑,并且实现了文本高亮。 然后想做些简单的语法判断,比如括号必须成对出现,+号后面不能有 /等等。。 先阶段我用正则校验的,但是效果并不好,像vs code这种是如何做到的。

    5 条回复    2020-12-16 14:39:42 +08:00
    codehz
        1
    codehz  
       2020-12-16 12:48:54 +08:00 via Android
    简单的话就整一个 parser,然后把需要的语法考虑进去就好了。。。
    比如你这种需求一个简单的状态机就搞定,注意忽略注释和文本里的,然后把左括号放栈里,遇到右括号就弹出来对比一下是否匹配,最后扫描到结尾栈里还有东西就说明漏了。。。
    (继续扩展下去就可以做完整的 parser 了
    miao1007
        2
    miao1007  
       2020-12-16 12:53:49 +08:00 via iPhone
    monaca editor
    cyberpoint
        3
    cyberpoint  
    OP
       2020-12-16 13:40:23 +08:00
    @codehz 看来还是要把关键符号放在栈里,才好计算。我现在是每一次都对所有做正则匹配,确实有些麻烦了。
    cyberpoint
        4
    cyberpoint  
    OP
       2020-12-16 13:41:51 +08:00
    @miao1007 这个我知道,没有去看源码,想知道一下大家的实现思路。
    codehz
        5
    codehz  
       2020-12-16 14:39:42 +08:00
    正常的正则表达式都无法处理这种递归的结构,.NET 的蜜汁正则倒是可以(
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2683 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:30 · PVG 11:30 · LAX 19:30 · JFK 22:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.