正则表达式匹配A,AB,ABC,但不匹配AC.("以..开始")

Jen*_*nni 5 javascript regex

我正撞在墙上.我想匹配一个正则表达式:空字符串A,AB以及ABC,但不是AC.我有这个,有效:

/^(A|AB|ABC)?$/
Run Code Online (Sandbox Code Playgroud)

但这是一种简化; 在我的应用程序AB,并且C实际上是长字符类,所以我不想一遍又一遍地重复它们.也许我只是没有以正确的方式看待它.我试过这个:

/^((AB?)C?)?$/
Run Code Online (Sandbox Code Playgroud)

但那仍然相配AC.

有没有更简单的方式来做到这一点,这可以扩展到(比方说)ABCD,ABCDE等等?

编辑:通过延伸到ABCDE,我的意思是会匹配:空字符串A,AB,ABC,ABCD,ABCDE.基本上,一个"开头"正则表达式.

Gum*_*mbo 10

试试这个正则表达式:

^(A(B(C)?)?)?$
Run Code Online (Sandbox Code Playgroud)

我认为你可以看到模式并扩展它ABCD并且ABCDE喜欢:

^(A(B(C(D)?)?)?)?$
^(A(B(C(D(E)?)?)?)?)?$
Run Code Online (Sandbox Code Playgroud)

现在每个部分取决于前面的部分(B取决于A,C取决于B等).


Car*_*icz 5

/^A(?:B(?:C)?)?$/
Run Code Online (Sandbox Code Playgroud)

应该这样做。

这是使用非捕获组构造,(?: xxx )以免弄乱您可能正在进行的任何匹配捕获。