正则表达式可选项

use*_*527 4 html java regex

如果我有这个正则表达式

print_first = print_first.replace(/ T(op Choice)?/gi, "<span class='top_choice'>&nbsp;Top Choice</span>");
Run Code Online (Sandbox Code Playgroud)

这不应该匹配这些字符串:T,To,Top,Top C,Top Ch,Top Cho,Top Choi,Top Choic,Top Choice?

什么是更好的方法呢?

And*_*ark 5

整个组都是可选的,但它是全部或全部不是逐个字符.所以你的正则表达式会匹配字符串' T'' Top Choice'.

不幸的是,通过角色行为获得那种角色的正则表达式非常难看.您需要一堆嵌套的可选组,如下所示:

/ T(o(p( (C(h(o(i(ce?)?)?)?)?)?)?)?)?/gi
Run Code Online (Sandbox Code Playgroud)

或者,您也可以使用|角色替换.天真的方法会很长,因为你需要列出所有选项,这里的方法试图有点聪明,但仍然可能比所有嵌套组更具可读性:

/ Top Choice?| Top Choi?| Top Ch?| Top ?| To?/gi
Run Code Online (Sandbox Code Playgroud)

因此,第一部分将匹配' Top Choice'' Top Choic',第二部分将匹配' Top Choi'' Top Cho',依此类推.请注意,较长的部分在正则表达式中排在第一位是非常重要的.