我原以为这个问题是不可能的; 据我所知,Javascript的正则表达式风格没有递归插值,也没有漂亮的.NET平衡组功能.然而就像regex.alf.nu上的问题12 那样:匹配平衡对<
和>
.除非在集合中有其他一些模式我没有得到.
那么......这可能吗?如果是这样,怎么样?
笔记:
我知道这对于真正的正则表达式来说是不可能的,但基于挑战,似乎它必须有可能在Javascript的风格(至少不规则,有反向引用).我只是不知道任何可以让他们这样做的功能.
没有其他代码 - 表单允许输入单个正则表达式,该表达式根据页面上的测试字符串进行评估.我想,我可以尝试破解页面以打破正则表达式并进入原始JS,但这似乎并不符合这一挑战的精神.
大卫问,这里是测试字符串.较长的已被截断了字符数,但问题的题目是"平衡",并且是完整的那些肯定是支持的"匹配"列有平衡对的假说<
和>
,而"不是"一栏没有.
Match all of these… <<<<<>><<>>><<... [62 chars] <<<<<>><>><<><... [110 chars] <<<<<>><>><>><... [102 chars] <<<<<>><>>>><<... [88 chars] <<<<<>>><<<>><... [58 chars] <<<<<>>><<><>>... [152 chars] <<<<<>>><<>><<... [42 chars] <<<<<>>><>><<<>>>><<>> <<<<<>>>><<<<>... [102 chars] <<<<<>>>><<<><... [30 chars] <<<<<>>>><><<<... [66 chars] <<<<<>>>><><<<... [124 chars] <<<<<>>>><>><<>> <<<<><<>>><<<>... [34 chars] <<<<>><<<>>>><... [92 chars] <<<<>>><<<<>><>><<<>>>>> <<<<>>><<<><<>>><><<>>>><<>> <<<<>>><<><<<>... [84 chars] <<<<>>>><<<><<... [52 chars] <<<><<<>>>><<<... [50 chars] <<<><<><>>>> <<<><>><<<>>>> <<<>><<<><<>>>... [44 chars] <<<>><><<<><>>... [48 chars] <<<>>><<><<<<>>>><<><<<>>>>> <<><<<<>><>>>>... [60 chars] <<>> <<>><<<<<>>>>>... [54 chars] <<>><<<<>><<<>... [74 chars] <> <><> and none of these… < <<<<<<>>><<><>>>>>><<> <<<<<>>><>>><<<>>>><>> <<<<<>>>>>> <<<<>><<<<<><<>><><<<< <<<>><<<<><><><>< <<<>>>><><<<><> <<><<<<><<><<>>><< <<><<<>>>>><< <<>>><<<>> <><<<>><<>>><<> <><<>>><<<><>><<<>>><<>>>>< <><<>>><><<<> <><>><>>><><<<... [36 chars] <>><><<<><> <>>>>>><<<>><<>><>< <>>>>>>><<< > >< ><<<>><><<<><< ><<<>>>><><<<<><>>><<><><< ><<><<<<><<<<>>>>< ><><><<<>>>>> ><><>>><>><> ><><>>>><>>>>>>><>>><>> ><>><<<<<>> ><>><><><<>><<>>><< ><>>><>>>>><<><<<><>><>><<< >><<<><<<<<<><>><< >><>>><<<><>>><><<>><<><><< >>>><>><>>>><>>><>><>< >>>>><<<>>>
ruakh.. 6
我不相信这在JavaScript中是可行的,尽管很难证明.例如,Java和PHP没有你提到的功能(递归插值,平衡组),但这个引人入胜的Stack Overflow答案显示了如何在这些语言中使用正则表达式进行匹配.(根据当前情况调整答案,Java正则表达式应该可以工作.更正:不,它不是那么容易适应.)但是答案取决于Java对占有量词的支持(除了你不能回溯它),和JavaScript没有那个.anbn
^(?:(?:<(?=<*(\1?+>)))+\1)*$
?+
?
也就是说,您可以通过编写以下内容来解决参考拼图:
^(?:<(?:<(?:<(?:<(?:<(?:<(?:<>)*>)*>)*>)*>)*>)*>)*$
最多匹配七个嵌套级别.这是任何琴弦所拥有的最多,所以这就是你所需要的.(该页面上的其他几个谜题建议你作弊,因为他们要求技术上不可能的东西;所以虽然优雅的解决方案显然会更具吸引力,但没有理由认为存在一个.)
我不相信这在JavaScript中是可行的,尽管很难证明.例如,Java和PHP没有你提到的功能(递归插值,平衡组),但这个引人入胜的Stack Overflow答案显示了如何在这些语言中使用正则表达式进行匹配.(根据当前情况调整答案,Java正则表达式应该可以工作.更正:不,它不是那么容易适应.)但是答案取决于Java对占有量词的支持(除了你不能回溯它),和JavaScript没有那个.anbn
^(?:(?:<(?=<*(\1?+>)))+\1)*$
?+
?
也就是说,您可以通过编写以下内容来解决参考拼图:
^(?:<(?:<(?:<(?:<(?:<(?:<(?:<>)*>)*>)*>)*>)*>)*>)*$
最多匹配七个嵌套级别.这是任何琴弦所拥有的最多,所以这就是你所需要的.(该页面上的其他几个谜题建议你作弊,因为他们要求技术上不可能的东西;所以虽然优雅的解决方案显然会更具吸引力,但没有理由认为存在一个.)