gpt4 book ai didi

javascript - 在 Regex 表达式中强制使用严格的字符顺序

转载 作者:行者123 更新时间:2023-11-30 11:14:02 25 4
gpt4 key购买 nike

我正在尝试在 Javascript 中创建一个正则表达式,该正则表达式的字符放置顺序有限,但我无法让验证完全正确。

表达的标准有点复杂。用户必须输入符合以下条件的字符串:

  1. 字符串包含两个部分,一个初始组和一个结束组。
  2. 各组之间用冒号 (:) 分隔。
  3. 字符串之间用分号 (;) 分隔。
  4. 初始组可以以一个可选的正斜杠开始并以一个可选的正斜杠结束,但这些正斜杠可能不会出现在组中的任何其他位置。
  5. 在正斜杠内,一个可选的下划线可以出现在任何一端,但它们不能出现在组中的其他任何地方。
  6. 在这些可选元素中,用户可以输入任意数量的大写或小写数字或字母,但其中一个字符必须用尖括号 (<>) 括起来。
  7. 如果括号内的字母是大写字母 C,它后面可以跟一个小写字母 u 或 v。
  8. 结尾组可以包含一个或多个数字或字母,大写或小写(如果是大写 C,则可以后跟小写 u 或 v。)或一个星号 (*),但不能同时包含两者.
  9. 字符串必须能够通过多个分组进行验证。

这听起来可能有点令人困惑。

例如,下面的例子是有效的:

<C>:Cu;
<Cu>:Cv;
/_V<C>V:C;
/_VV<Cv>VV_/:Cu;
_<V>:V1;
_<V>_:V1;
_<V>/:V1;
_<V>:*;
_<m>:n;

以下是无效的:

Cu:Cv;
Cu:Cv
CuCv;
<Cu/>:Cv;
<Cu_>:Cv;
<Cu>:Cv/;
_/<Cu>:Cv;
<Cu>/_:Cv;

他们应该像这样分组在一起时进行验证。

<Cu>:Cv;/_V<C>V:C;_<V>:V1;_<V>/:V1;_<V>:*;_<m>:n;

希望这些示例可以帮助您理解我要匹配的内容。

我创建了以下正则表达式并在 Regex101.com 上对其进行了测试,但这是我能得出的最接近结果:

\\/{0,1}_{0,1}[A-Za-z0-9]{0,}<{1}[A-Za-z0-9]{1,2}>{1}[A-Za-z0-9]{0,}_{0,1}\\/{0,1}):([A-Za-z0-9]{1,2}|\\*;$

它大部分是正确的,但它允许应该无效的字符串,例如:

_/<C>:C;

如果下划线出现在第一个正斜杠之前,它应该被拒绝。否则,我的正则表达式似乎对所有其他情况都是正确的。

如果有人对如何解决此问题有任何建议,或者知道更有效地匹配所有条件的方法,我们将不胜感激。

最佳答案

以下似乎满足所有标准:

(?:^|;)(\/?_?[a-zA-Z0-9]*<(?:[a-zA-Z]|C[uv]?)>[a-zA-Z0-9]*_?\/?):([a-zA-Z0-9]+|\*)(?=;|$)

Regex101 demo .

它将每个“组”放在一个捕获组中,以便您可以单独访问它们。

详细信息:

  • (?:^|;)一个非捕获组,用于确保字符串位于开头或以分号开头。

  • (第 1 组开始。

    • \/?_?可选的正斜杠后跟可选的下划线。

    • [a-zA-Z0-9]*任何字母或数字 - 匹配零个或多个。

    • <(?:[a-zA-Z]|C[uv]?)>必填<>包含一个字母或大写字母的对 C后跟小写 uv .

    • [a-zA-Z0-9]*任何字母或数字 - 匹配零个或多个。

    • _?\/?可选的下划线后跟可选的正斜杠。

  • ) group1 结束。

  • :按字面匹配冒号字符。

  • ([a-zA-Z0-9]+|\*)第 2 组 - 包含一个或多个数字或字母或单个 *性格。

  • (?=;|$)一个积极的 Lookahead,以确保字符串后跟一个分号或在末尾。

关于javascript - 在 Regex 表达式中强制使用严格的字符顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52378112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com