chenqiangdage 2019-06-30
38:1,749:0,188:1
这样的字符串来存储团队普通成员对于各用户项目的权限,比如其中749代表ID为749的用户项目,冒号标记符后跟随的0数字表示具有查看权限,1数字则表示兼具查看和设置权限,多个用户项目权限标记间以逗号分隔,如果对于一个用户项目没有任何权限,则整个权限字符串中将不会出现该项目ID。基本结构定了之后,那么我们其中一个类似的查找检测权限问题是,已知用户权限字符串,检测对于指定项目比如749是否具有设置权限,在这里的问题情境其实就是检测用户权限字符串中是否包含749:1
这个子字符串。可以有如下几种解决方式:749:1
这样的单个项目权限标记子字符串,再检测这个数组中是否存在749:1
这一元素项。^749:1|,749:1
,进一步可以简化为(^|,)749:1
(注意:一个小陷阱,想想这里如果不使用正则表达式匹配,而只使用普通字符串749:1作为要查找匹配的目标会出现什么问题?)。(?<!\d)749:1
(我们知道D表示非数字,那么这里表达式如果修改为(?<=\D)749:1
是否可以正常工作?)。(?<=\d)(?=(\d\d\d)+$)
,并结合开发语言的replace替换功能进行全局匹配替换。(想想这里如果去掉$结果会如何?)遗憾的是,JavaScript不支持逆序环视,因此如果要使用JavaScript中的正则表达式进行处理,刚刚的匹配正则表达式就需要修改为:(\d)(?=(\d\d\d)+$)
,并需要结合对捕获型括号的反向引用$1进行全局匹配替换。