如果我有以下这个正则表达式
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 Choice'
或' Top Choic'
,第二部分将匹配' Top Choi'
或' Top Cho'
,以此类推。请注意,在正则表达式中,较长的部分应该首先出现,这一点非常重要。
使用一个非丑陋的正则表达式很困难。就编码而言,最整洁的方法是迭代字母并去掉最后一个字母。
String r = "TopChoice";
while (r.length() > 0) {
//Check for match to String r
r = r.substring(0, r.length() - 1).trim();
}
top_choice
,如果你删除/i
就不会匹配了。 - Pedro LobitoT(?:o(?:p(?: (?:C(?:h(?:o(?:i(?:ce?)?)?)?)?)?)?)?)?
可能更好,因为它使用非捕获组而不是8个嵌套的捕获组。 - AeroX