如果我有这个正则表达式
print_first = print_first.replace(/ T(op Choice)?/gi, "<span class='top_choice'> Top Choice</span>");
这不应该匹配这些字符串:T、To、Top、Top C、Top Ch、Top Cho、Top Choi、Top Choic、Top Choice?
这样做的更好方法是什么?
最佳答案
整个组都是可选的,但不是一个字符一个字符地全有或全无。因此,您的正则表达式将匹配字符串 ' T'
或 ' Top Choice'
。
不幸的是,通过字符行为获取这种字符的正则表达式非常难看。您需要一堆嵌套的可选组,如下所示:
/ T(o(p( (C(h(o(i(ce?)?)?)?)?)?)?)?)?/gi
或者,您可以使用带有 |
字符的交替。天真的方法会很长,因为您需要列出所有选项,这里是一种尝试有点聪明但仍然可能比所有这些嵌套组更具可读性的方法:
/ Top Choice?| Top Choi?| Top Ch?| Top ?| To?/gi
所以第一部分将匹配 'Top Choi'
或 'Top Choic'
,第二部分将匹配 'Top Choi'
或 'Top Cho'
,等等。请注意,较长的部分在正则表达式中排在第一位非常重要。
关于java - 正则表达式可选项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23249257/