Javascript 正则表达式忽略捕获组顺序
请在chrome中打开以下URL=> 正则表达式:Javascript 正则表达式忽略捕获组顺序,javascript,regex,swap,capturing-group,Javascript,Regex,Swap,Capturing Group,请在chrome中打开以下URL=> 正则表达式: \b(f|fall|w|winter|s|spring|su|summer)\b\s*(?<!\d)(\d{4}|\d{2})(?!\d) 我定义的正则表达式适用于所有测试字符串,但交换捕获组顺序时除外(2016年秋季或16f或18Su) 正则表达式中是否有一种方法可以忽略RegExp捕获组的顺序?您可以使用两个部分的替换,其中年份和季节是交换的,然后只捕获匹配的捕获: \b(?:(f(?:all)?|w(?:inter)?|s(?:p
\b(f|fall|w|winter|s|spring|su|summer)\b\s*(?<!\d)(\d{4}|\d{2})(?!\d)
我定义的正则表达式适用于所有测试字符串,但交换捕获组顺序时除外(2016年秋季或16f或18Su)
正则表达式中是否有一种方法可以忽略RegExp捕获组的顺序?您可以使用两个部分的替换,其中年份和季节是交换的,然后只捕获匹配的捕获:
\b(?:(f(?:all)?|w(?:inter)?|s(?:pring|u(?:mmer)?)?)\s*(\d{2}(?:\d{2})?)|(\d{2}(?:\d{2})?)\s*(f(?:all)?|w(?:inter)?|s(?:pring|u(?:mmer)?)?))\b
见
我与您的备选方案签订合同,以提高匹配效率:所有备选方案只应在唯一的位置匹配。词的界限似乎对你的情况足够了
在JS中,您可以动态构建模式:
var-strs=['2018年秋季','2018年秋季','2016年秋季','F2016','2016年秋季'];
var season=“(f(?:all)?w(?:inter)?s(?:Spring(?:u(?:mmer)?)?”;
var year=“(\\d{2}(?:\\d{2})”;
var p=new RegExp(\\b(?“+seasure+”\\s*“+year+“|“+year+”\\s*“+seasure+”)\\b”,“i”);
var结果=[],m;
用于(STR的var s){
m=s.match(p);
如果(m){
if(m[1]){
log(m[1],“:”,m[2]);
}否则{
log(m[3],“:”,m[4]);
}
}
}
请在chrome中打开下面的URL
不要告诉人们去外部网站,在你的问题中发布所有相关的代码。@CertainPerformance即使他发布了regex,我们也必须去regex101或类似的地方。@revo关键是,如果将来链接断开,这个问题将不会对任何人负责或有帮助。如果正则表达式有问题,这种情况就不会发生。@Sweeper是的,我知道你在说什么,但你没有明白我的意思。然而,在未来——我不认为你所谈论的未来是在接下来的几秒钟内——这可能得到了答案,或者已经结束了。所以不必担心没有责任。这对任何人都没有帮助。我更新了问题,加入了正则表达式。你们应该解释你们真正的问题是什么。我们看看正则表达式是如何工作的,你到底需要什么?为什么您认为您需要相同的分组订购?对于提供的每个示例字符串,最终结果应该是什么样的?请注意,您当前的正则表达式(在本文中)不需要lookback,它与相同。另外,为什么不使用4个组并检查哪一个匹配以在结果数组中获得正确的值?看见
\b(?:(f(?:all)?|w(?:inter)?|s(?:pring|u(?:mmer)?)?)\s*(\d{2}(?:\d{2})?)|(\d{2}(?:\d{2})?)\s*(f(?:all)?|w(?:inter)?|s(?:pring|u(?:mmer)?)?))\b