昨天产品跑过来跟我说,客户在Safari上打不开我们的系统,但是在Chrome上确实没有任何问题的。。我当时心里一惊,难道又是什么奇妙的兼容问题,赶紧去看下怎么回事.
invalid group specifier name
经过一番搜索,发现有人提到IOS系统不支持正则的零宽断言(又叫环视)语法
所谓零宽断言: 就是正则中用于匹配模式位置的语法. 环视就是要求匹配部分的前面或后面要满足(或不满足)某种规则,有些地方也称环视为零宽断言。比如要匹配"tom will come to my home and let's play togerther tomorrow."中的tom,如果直接用/tom/匹配的话,会意外匹配到tomorrow的开头三个字母,又或者匹配邮政编码,容易匹配到身份证号的前六位。
如果我们不会断言的话,可以先使用简单的单词边界和行首行尾, 比如: /\Wtom\W/ 或者 /\btom\b/ 或者 /[^0-9][0-9]{6}[^0-9]/,但是这种不够优雅也容易误判。
零宽断言分为四种:
| 正则 | 名称 | 意义 |
|---|---|---|
| (?<=Y) | 左侧肯定环视 | 模式左边是Y |
| --- | --- | --- |
| (?<!Y) | 左侧否定环视 | 模式左边不是Y |
| --- | --- | --- |
| (?=Y) | 右侧肯定环视 | 模式右边是Y |
| --- | --- | --- |
| (?!Y) | 右侧否定环视 | 模式右边不是Y |
最终找到是我之前写的一处校验excel单元格复制和内容解析的一处正则,后来去掉了环视,改为降级方法,匹配包括两端的尖括号"> xxx <"。