如何创建正则表达式javascript函数来匹配字符串的特定组合?

如何创建正则表达式javascript函数来匹配字符串的特定组合?,javascript,regex,Javascript,Regex,我只是有一个问题,创建一个函数来匹配这个字符串组合。 第一部分包含I、II、III或IV,然后用/字符分隔。然后是A、B、C或D 所以它像III/A,IV/B,I/D 你知道怎么解决这个问题吗?你可以用 .match("(I|II|III|IV)/[ABCD]") 你可以用 .match("(I|II|III|IV)/[ABCD]") 这实际上是一个很好的教学机会 首先,需要^和$确保整个字符串与正则表达式匹配 /^(regex)$/ 现在,要通过III匹配I,可以使用{m,n}: IV则

我只是有一个问题,创建一个函数来匹配这个字符串组合。 第一部分包含I、II、III或IV,然后用/字符分隔。然后是A、B、C或D

所以它像III/A,IV/B,I/D

你知道怎么解决这个问题吗?

你可以用

.match("(I|II|III|IV)/[ABCD]")
你可以用

.match("(I|II|III|IV)/[ABCD]")

这实际上是一个很好的教学机会

首先,需要
^
$
确保整个字符串与正则表达式匹配

/^(regex)$/
现在,要通过
III
匹配
I
,可以使用
{m,n}

IV
则不同。你需要允许两个。但为了确保替换仅包括文本而不包括锚定,您需要将其包含在一个:

剩下的就直截了当了
\/
匹配一个斜杠,由于接下来的四个备选字符的长度都是一个字符,因此不需要使用备选字符,但可以使用:


这实际上是一个很好的教学机会

首先,需要
^
$
确保整个字符串与正则表达式匹配

/^(regex)$/
现在,要通过
III
匹配
I
,可以使用
{m,n}

IV
则不同。你需要允许两个。但为了确保替换仅包括文本而不包括锚定,您需要将其包含在一个:

剩下的就直截了当了
\/
匹配一个斜杠,由于接下来的四个备选字符的长度都是一个字符,因此不需要使用备选字符,但可以使用:

  • 第一捕获组(I | II | III | IV) 第1种选择:I I按字面意思匹配字符I(区分大小写) 第二备选案文:二 II按字面意思与字符II匹配(区分大小写) 第三备选方案:三 III按字面意思与字符III匹配(区分大小写) 第四备选案文:四 IV按字面意思匹配字符IV(区分大小写)

  • 第二捕获组(/) /与字符/字面匹配

  • 第三捕获组([A-D]) [A-D]匹配下表中的单个字符 A-D A到D之间的单个字符(区分大小写) g修饰语:全局。所有比赛(第一场比赛不返回)

  • 第一捕获组(I | II | III | IV) 第1种选择:I I按字面意思匹配字符I(区分大小写) 第二备选案文:二 II按字面意思与字符II匹配(区分大小写) 第三备选方案:三 III按字面意思与字符III匹配(区分大小写) 第四备选案文:四 IV按字面意思匹配字符IV(区分大小写)

  • 第二捕获组(/) /与字符/字面匹配

  • 第三捕获组([A-D]) [A-D]匹配下表中的单个字符 A-D A到D之间的单个字符(区分大小写) g修饰语:全局。所有比赛(第一场比赛不返回)


  • 这里是
    ^(?:II?I?| IV)\/[ABCD]$
    这里是
    ^(?:II?I?| IV)\/[ABCD]$
    请注意,最好写:
    ^I(?:I{1,2}V)\/[ABCD]$
    ^I(?:II?| V)\/[ABCD]$
    ,因为如果字符串以
    IV
    开头,第一次替换不会成功<代码>^I(?:V | I{0,2})\/[ABCD]$也是可能的,但不会将最可能的替代方案放在首位。@Casimirithipolyte:好主意。很高兴看到一个人能在这样一个(乍一看)琐碎的问题上投入多少心思。简单的案例是最好的,在更长的模式中,我可能会错过这一点。请注意,最好写:
    ^I(?:I{1,2}V)\/[bacd]$
    ^I(?:II?;V)\/[bacd]$
    因为如果字符串以
    IV
    开头,则第一次替换不会成功<代码>^I(?:V | I{0,2})\/[ABCD]$也是可能的,但不会将最可能的替代方案放在首位。@Casimirithipolyte:好主意。很高兴看到一个人能在这样一个(乍一看)琐碎的问题上投入多少心思。简单的案例是最好的,在更长期的模式中,我可能会错过这一点。
    /^I(?:I{0,2}|V)\/[ABCD]$/
    
    /(I|II|III|IV)(\/)([A-D])/g