V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
cyberpoint
V2EX  ›  问与答

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

  •  
  •   cyberpoint · Dec 16, 2020 · 1758 views
    This topic created in 1960 days ago, the information mentioned may be changed or developed.

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

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