我遇到的正则表达式的小坑(split篇)
经过几天的努力, bonTemplate v1.0.5
终于发布了, 改进了if标签中的表达式逻辑, 心中一块石头算是落了地, 这几天, if标签的边界问题方案是修了改, 改了修, 哥的ifext分枝不带这么玩的.. 哎呀废话不多说, 我还记得我是来干嘛的, 来说说这次遇到的怪问题.
先看看问题正则
1 | <each\s+([\w.]+)\=['"]?(\w+)['"]?(?:\s+([\w.]+)\=['"]?(\w+)['"]?)*\s*> |
我去, 这是个毛啊
好吧, 咱就抓住主要矛盾,忽略次要矛盾, 来个简单的小场景:
取出下面字符串所有的字符串, 子字符串只能含有字母
1 | abcdetestfgh,hello,bonTemplate |
ok, 小case, 直接按逗号split就行了, 正则都不用写了
abcdetestfgh
hello
bonTemplate
哥正在沾沾自喜, 产品又来了说需求要改, 说子字符串不能包含逗号,也不能包含test这个字符串.
看来只能写个正则了, 这也不是什么问题.
1 | (?:test|,) |
哥想这下没问题了, 可不一样会, 产品又来了, 说子字符也不能包含abc, 我去!
那就改改吧, 这还能难的倒哥吗?1 | (test|,|abc) |
..等等, 不对啊, 我是按test逗号abc这三个split,怎么会出现在结果中!?
上一个结果还是正常的, 这次就加了一个abc,怎么就不正常了呢?
哦.. 还有个差别是一个是捕获性分组, 一个是非捕获性分组, 难道还和这个有关?
于是改了下,改成非捕获性分组