gpt4 book ai didi

Javascript 正则表达式(模式的不间断重复)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:47:15 26 4
gpt4 key购买 nike

假设我在 javascript 中有一个给定的字符串 - 例如,var s = "{{1}}SomeText{{2}}SomeText";它可能很长(例如 25,000 多个字符)。

注意:我在这里使用“SomeText”作为占位符来指代任意数量的纯文本字符。换句话说,“SomeText”可以是任何不包含 {{1}} 或 {{2}} 的纯文本字符串。所以上面的例子可能是var s = "{{1}}Hi there. This is a string with one { curly bracket{{2}}Oh, very nice to meet you. I also have one } curly bracket!";那将是完全有效的。

它的规则很简单:

它不需要任何 {{2}} 的实例.但是,如果确实如此,那么在该实例之后我们就不会遇到另一个 {{2}}除非我们找到 {{1}}首先。

有效示例:

“{{2}}一些文本”

“{{1}}SomeText{{2}}SomeText”

“{{1}}SomeText{{1}}SomeText{{2}}SomeText”

“{{1}}SomeText{{1}}SomeText{{2}}SomeText{{1}}SomeText”

“{{1}}SomeText{{1}}SomeText{{2}}SomeText{{1}}SomeText{{1}}SomeText”

“{{1}}SomeText{{1}}SomeText{{2}}SomeText{{1}}SomeText{{1}}SomeText{{2}}SomeText”

等...

无效示例:

“{{2}}SomeText{{2}}SomeText”

“{{1}}SomeText{{2}}SomeText{{2}}SomeText”

“{{1}}SomeText{{2}}SomeText{{2}}SomeText{{1}}SomeText”

等...

这似乎是一个相对容易解决的问题 - 事实上我可以在没有正则表达式的情况下轻松解决它,但我很想学习如何使用正则表达式来做这样的事情。不幸的是,我什至不确定“条件和前瞻”是否是对这种情况下问题的正确描述。

注意:如果提出了不涉及“条件和前瞻”的可行解决方案,那么我将编辑标题。

最佳答案

反转条件可能更容易。尝试匹配包含 {{2}} 的两个连续实例的任何文本,如果它匹配它,那很好。

使用这个策略,你的模式可以很简单:

/{\{2}}([^{]*){\{2}}/

Demonstration

这将匹配文字 {{2}},后跟 { 以外的零个或多个字符,后跟文字 {{2}}

请注意,第二个 { 需要转义,否则,正则表达式引擎会将 {2} 视为前一个 { 的量词(即 {{2} 恰好匹配两个 { 字符)。


以防万一您需要允许像 { 这样的字符,并且在两个 {{2}} 之间,您可以使用这样的模式:

/{\{2}}((?!{\{1}}).)*{\{2}}/

Demonstration

这将匹配文字 {{2}},后跟零个或多个任意字符,只要这些字符创建类似 {{1}} 的序列>,后跟文字 {{2}}

关于Javascript 正则表达式(模式的不间断重复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20980654/

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