gpt4 book ai didi

javascript - 只匹配@而不匹配@@,没有负面回溯

转载 作者:行者123 更新时间:2023-11-29 23:16:53 26 4
gpt4 key购买 nike

使用 JavaScript,我需要一个匹配任何字符串中 @{this-format} 的任何实例的正则表达式。我原来的正则表达式如下:

@{[a-z-]*}

但是,我还需要一种方法来“逃避”那些实例。我想要这样,如果你添加一个额外的 @,匹配就会被转义,比如 @@{this}。

我最初使用的是负向回顾:

(?<!@)@{[a-z-]*}

这会工作得很好,除了......后视是 ECMAScript2018 的一项功能,只有 Chrome 支持。

我读到一些人建议使用否定字符集。所以我的小正则表达式变成了这个:

(?:^|[^@])@{[a-z-]*}

...这本来也可以工作,但如果将其中两个放在一起就无法工作:@{foo}@{bar​​}

那么,有人知道我怎样才能做到这一点吗?请记住,需要满足这些条件:

  • 在字符串中的任意位置查找@{this}
  • 能够像@@{this}一样逃脱
  • 能够把多个相邻的,比如@{these}@{two}
  • 不得使用后视

最佳答案

如果您在正则表达式模式中包含 @@ 作为备用匹配选项,它将使用 @@ 而不是允许匹配后续括号内的实体。像这样:

@@|(@{[a-z-]*})

然后您可以在 javascript 中评估内部匹配对象。 Here is a jsfiddle使用以下代码进行演示。

var targetText = '@{foo} in a @{bar} for a @@{foo} and @{foo}@{bar} things.'
var reg = /@@|(@{[a-z-]*})/g;
var result;
while((result = reg.exec(targetText)) !== null) {
if (result[1] !== undefined) {
alert(result[1]);
}
}

关于javascript - 只匹配@而不匹配@@,没有负面回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52417355/

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