gpt4 book ai didi

javascript - 如何匹配 javascript 正则表达式中的平衡定界符?

转载 作者:数据小太阳 更新时间:2023-10-29 04:42:34 26 4
gpt4 key购买 nike

我本来以为这个问题是不可能的;据我所知,Javascript 的正则表达式风格既没有递归插值,也没有漂亮的 .NET 平衡组功能。然而它就在那里,作为 regex.alf.nu 上的问题 12| : 匹配 < 的平衡对和 > .除非集合中有其他模式,否则我不会得到。

那么……这可能吗?如果是,怎么办?

注意事项:

  1. 我知道这对于真正的正则表达式来说是不可能的,但基于挑战,它似乎在 Javascript 的风格中是可能的(它至少不规则到足以有反向引用)。我只是不知道有什么功能可以让他们这样做。

  2. 没有其他代码 - 该表单允许输入单个正则表达式,该正则表达式根据页面上的测试字符串进行评估。我想我可以尝试破解页面以打破正则表达式并进入原始 JS,但这似乎不符合本次挑战的精神。

既然大卫问了,这里是测试字符串。较长的已被字符数 chop ,但问题的标题是“平衡”,而完整的肯定支持“匹配”列具有平衡的 < 对的假设。和 >而“不”列则没有。

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]
<>><><<<><>
<>>>>>><<<>><<>><><
<>>>>>>><<<
>
><
><<<>><><<<><<
><<<>>>><><<<<><>>><<><><<
><<><<<<><<<<>>>><
><><><<<>>>>>
><><>>><>><>
><><>>>><>>>>>>><>>><>>
><>><<<<<>>
><>><><><<>><<>>><<
><>>><>>>>><<><<<><>><>><<<
>><<<><<<<<<><>><<
>><>>><<<><>>><><<>><<><><<
>>>><>><>>>><>>><>><><
>>>>><<<>>>

最佳答案

我不相信这在 JavaScript 中是可能的,尽管很难证明。比如Java和PHP没有你说的特性(递归插值,平衡组),但是this fascinating Stack Overflow answer显示如何匹配 a<sup><em>n</em></sup>b<sup><em>n</em></sup>在这些语言中使用正则表达式。 (根据当前情况调整该答案,Java 正则表达式 ^(?:(?:<(?=<*(\1?+>)))+\1)*$ 应该可以工作。 更正: 不,它并不那么容易调整。)但该答案取决于 Java 的支持对于 所有格 量词 ?+ (类似于 ?,只是你不能回溯到它),而 JavaScript 没有。

也就是说,您可以通过编写以下内容来解决引用的难题:

^(?:<(?:<(?:<(?:<(?:<(?:<(?:<>)*>)*>)*>)*>)*>)*>)*$

最多匹配七层嵌套。这是所有琴弦中最多的,所以这就是您所需要的。 (该页面上的其他几个谜题建议您作弊,因为它们要求的东西在技术上是不可能的;因此虽然优雅的解决方案显然更具吸引力,但没有理由假设存在这种解决方案。)

关于javascript - 如何匹配 javascript 正则表达式中的平衡定界符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20726770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com