我有 PCRE 正则表达式的工作版本,用于检查给定字符串是否匹配 French licence plates 。它是这样的(live demo):
/^(?(?!ss|ww)[a-hj-np-tv-z]{2})(?:\s|-)?[0-9]{3}(?:\s|-)?(?(?!ss)[a-hj-np-tv-z]{2})$/i
现在我想将其转换为 JavaScript 正则表达式语法。我明白conditional regex syntax used here is not supported by JavaScript regex engine ,所以我应该重写它。
我从第一组开始:
- 必须有两个字母
- 他们不可能是 SS 或 WW
- 他们无法使用 I、O、U
这就是我的想法( live demo ):
/^(?!(?=(?:ss|ww))|(?![a-hj-np-tv-z]{2}))/i
而且它有效。现在我想添加第二部分:
- 第一组可以(但不一定)后跟空格字符或连字符。
- 之后是一组恰好为 3 位的数字。
所以我尝试添加 (?:\s|-)?[0-9]{3}
但失败了。我想这可能与第一组is not consumed有关。 ,但我不明白为什么。或者,如果有人也能够帮助我了解如何创建前两个字母组的捕获组(我现在不需要它,但帽子会帮助我理解这个过程)。
最佳答案
我想你可以简单地使用以下内容:
/^(?!ss|ww)[a-hj-np-tv-z]{2}[ -]?[0-9]{3}[ -]?(?!ss)[a-hj-np-tv-z]{2}$/i
它似乎对我来说效果很好。
关于JavaScript 正则表达式匹配法国车牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37855766/