各位大佬,求一个正则。

2021-04-13 09:39:46 +08:00
 w292614191

我正在开发一个前端的类 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('','','')

2706 次点击
所在节点    JavaScript
12 条回复
ccraohng
2021-04-13 09:52:27 +08:00
假设规则是 去掉重复的 一个大写字母一个数字吧

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

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

s.replace(g, '$1')

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

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

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/770260

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX