V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
w292614191
V2EX  ›  JavaScript

各位大佬,求一个正则。

  •  
  •   w292614191 · 2021-04-13 09:39:46 +08:00 · 2423 次点击
    这是一个创建于 1080 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我正在开发一个前端的类 Excel 计算功能。

    这是一个错误的公式,要得出“H4H4H4”、“J3J3J3J3”,可能有多个匹配。

    =A1+M2-N2+H4H4H4+G7+H5/J3*PREXM('','','')

    =A1+M2-N2+H4H4+G7+H5/J3J3J3J3*PREXM('','','')

    正确的是这样的:

    =A1+M2-N2+H4+G7+H5/J3*PREXM('','','')

    12 条回复    2021-04-13 13:22:02 +08:00
    ccraohng
        1
    ccraohng  
       2021-04-13 09:52:27 +08:00   ❤️ 1
    假设规则是 去掉重复的 一个大写字母一个数字吧

    ```js
    g = /([A-Z]\d)\1+/g

    s = "A1+M2-N2N2+H4H4+G7+H5/J3J3J3J3*PREXM('','','')"

    s.replace(g, '$1')

    ```
    skys215
        2
    skys215  
       2021-04-13 09:53:09 +08:00   ❤️ 2
    `([A-Z]\d){2,}` 就可以匹配到了吧?
    Jeyfang
        3
    Jeyfang  
       2021-04-13 10:00:24 +08:00
    2 楼的就可以
    no1xsyzy
        4
    no1xsyzy  
       2021-04-13 10:57:58 +08:00
    如果是 H1H2H3H4 这种怎么办?

    是否有 AA1234 这种地址? [A-Z]\d 看上去不够
    w292614191
        5
    w292614191  
    OP
       2021-04-13 11:10:48 +08:00
    @no1xsyzy #4
    @skys215 #2

    ganxi 感谢。看起来可行。
    w292614191
        6
    w292614191  
    OP
       2021-04-13 11:11:45 +08:00
    @ccraohng #1 你这个也可,但是不能满足 4 楼提出的那种情况。非常感谢。
    JeffGe
        7
    JeffGe  
       2021-04-13 11:13:55 +08:00 via Android
    .replace(/([A-Z]+\d+)\1+/g, '$1')
    imlinhanchao
        8
    imlinhanchao  
       2021-04-13 11:18:22 +08:00
    我觉得你需要的是这个: https://www.npmjs.com/package/excel-formula-sdk
    w292614191
        9
    w292614191  
    OP
       2021-04-13 11:24:31 +08:00
    @imlinhanchao #8 感谢,我们已有一个词法解析器,结合了自己的业务。
    balabalaguguji
        10
    balabalaguguji  
       2021-04-13 11:30:42 +08:00
    youhuo
        11
    youhuo  
       2021-04-13 13:15:03 +08:00
    2 楼不错
    ditel
        12
    ditel  
       2021-04-13 13:22:02 +08:00 via Android
    感觉为了以后的方便,该这样比较好

    g = /([A-Z]+\d+)\1+/g
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1000 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:11 · PVG 06:11 · LAX 15:11 · JFK 18:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.