JavaScript正则表达式匹配法国车牌

时间:2016-06-16 09:53:26

标签: javascript regex

我有一个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 regex语法。我理解conditional regex syntax used here is not supported by JavaScript regex engine,所以我应该重写它。

我从第一组开始:

  1. 必须有两个字母
  2. 他们不能成为SS也不是WW
  3. 他们不能使用I,O,U
  4. 这就是我提出的问题(live demo):

    /^(?!(?=(?:ss|ww))|(?![a-hj-np-tv-z]{2}))/i
    

    它有效。现在我想补充第二部分:

    1. 第一组可以是(但不一定要),后跟空白字符或连字符。
    2. 之后有一组正好是3位数字。
    3. 所以我试图添加(?:\s|-)?[0-9]{3},但它失败了。我想这可能与第一组is not consumed的事实有关,但我不明白为什么。可选地,如果有人也能够帮助我提供有关如何创建前两个字母组的捕获组的信息(我现在不需要它,但是帽子可以帮助我理解这个过程)。

2 个答案:

答案 0 :(得分:3)

我想你可以简单地使用以下内容:

update

这似乎对我有用。

答案 1 :(得分:1)

开始可以

/^(?!ss|ww|.[iou]|[iou].)[a-z]{2}[-\s]?\d{3}/i

完整的表达是

/^(?!ss|ww|.[iou]|[iou].)[a-z]{2}[-\s]?\d{3}[-\s]?(?!ss|ww|.[iou]|[iou].)[a-z]{2}$/i