如何在JavaScript中编写重复的正则表达式模式

如何在JavaScript中编写重复的正则表达式模式,javascript,regex,Javascript,Regex,如何在JavaScript中为以下模式编写正则表达式: 1 | dc35 |海关| 3;od;CZY;GL | 2;ob;BNP;MT | 4;sd;ABC;MT | 5;ih;密度泛函;FR | 6;哦AQW;MT | 7;知识产权;可以MT | 8;op;汽车MT | 9;欧共体;SMO;GL | 10;做CZT;库| 在哪里 第一部分1 | dc35 |是固定的 从第二部分开始,图案重复9次(即3;od;CZY;GL|2;ob;BNP;MT|等) 其中的第一个字符范围为2-11,不应重

如何在JavaScript中为以下模式编写正则表达式:

1 | dc35 |海关| 3;od;CZY;GL | 2;ob;BNP;MT | 4;sd;ABC;MT | 5;ih;密度泛函;FR | 6;哦AQW;MT | 7;知识产权;可以MT | 8;op;汽车MT | 9;欧共体;SMO;GL | 10;做CZT;库|

在哪里

  • 第一部分
    1 | dc35 |
    是固定的
  • 从第二部分开始,图案重复9次(即
    3;od;CZY;GL|2;ob;BNP;MT|
    等)

其中的第一个字符范围为2-11,不应重复。例如,
3
出现在第一个模式中,因此不应再次出现。

有点棘手,但现在开始

正则表达式:
/^1\\dc35\u custom(?:\\([2-9]| 1[01]);[a-z]{2};[a-z]{1,3};[a-z]{1,2}{9}$/

单元测试:(点击左边的“单元测试”)

我假设如下:

  • 第一组始终是相同的
  • 图案
    3;od;CZY;GL
    的第一部分是一个介于2-11之间的数字,任何数字都不能重复
  • 第二部分是小写字母a-z,正好是其中的两个
  • 第三部分是大写字母A-Z,介于1和3之间(如果是{1,3}的话,你可以把它改成{3})
  • 第四部分也是最后一部分是1到2个大写字母A-Z

  • 我对此做了很多假设,但这里有一个漏洞:

    1\|dc35_custom\|(([2-9]|10|11);[a-z]{2};[A-Z]{3};[A-Z]{2}\|){9}
    
    工作原理
    • 1\| dc35|u custom\|
      只是文字文本,转义垂直条运算符
    • ([2-9]| 10 | 11)
      将匹配2到11之间的任何数字
    • [a-z]{2}
      将匹配两个小写字母
    • [A-Z]{3}
      将匹配三个大写字母
    • [A-Z]{2}
      将匹配两个大写字母
    • {9}
      查找括号内整个序列的九个连续匹配项

    正如阿马丹指出的那样,它不会检查唯一性,因为这有点超出了正则表达式的用途。

    你能详细说明一下“等等”吗?如果无法在正则表达式中描述模式,请用文字描述该模式。因此,您希望正则表达式模式过滤掉一个数字,并保留所有其他内容不变?请给出所需最终结果的示例。您的输入字符串要么顺序错误,要么粘贴错误:
    |3;od;CZY;GL|2;ob;BNP;MT
    “无法重复”无法使用regexp执行位。您需要手动检查唯一性(通过
    .exec
    循环或通过拆分和映射将其拉出)@Mario:它可以检查一件与另一件不同。它不能在循环中进行。下面的代码只测试非第一件与第一件不同,并且没有说明它们之间的不同。例如:
    1 | dc35 | u custom | 3;od;CZY;GL | 2;ob;BNP;MT | 2;sd;ABC;MT | 2;ih;DFT;FR | 2;oh;AQW;MT | 2;MT | 2;ip;can;MT;GL | 2;do;CZT;KU |
    匹配。