gpt4 book ai didi

javascript - 正则表达式如果匹配则消耗一个字符,否则不消耗

转载 作者:行者123 更新时间:2023-11-28 14:38:28 25 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式,它将捕获“@”字符的所有实例,除非连续出现两个这样的字符(本质上是转义序列)。例如:

abd@ajk:@应该匹配

abd@@ajk:没有匹配项

abd@@@ajk:final @ 应匹配。

abd@@@@ajk:没有匹配项

这几乎适用于负向先行表达式 @(?!@),只不过因为第二个 @ 未被消耗,所以两个 @ 中的最后一个 符号仍会匹配。我想我想做的是向前查找 @ 但如果存在则消耗该字符;否则请勿食用。这可能吗?

编辑:我正在使用 Javascript,不幸的是,它排除了几种好的方法:(

最佳答案

在 JavaScript 中,要在未转义的 @ 处分割字符串,您实际上可以匹配@@ (转义的@) 以及 @ 以外的任何字符:

var strs = ['abd@ajk','abd@@ajk','abd@@@ajk','abd@@@@ajk'];
var rx = /(?:[^@]|@@)+/g;
for (var s of strs) {
console.log(s, "=>", s.match(rx))
}

正则表达式是

/(?:[^@]|@@)+/g

参见its demo

详细信息

  • (?: - 匹配以下两个选项之一的非捕获组的开头:
    • [^@]-除@`以外的任何字符
    • | - 或
    • @@ - 2 @s
  • )+ - 重复匹配 1 次或多次。

g 修饰符查找输入字符串中的所有匹配项。

关于javascript - 正则表达式如果匹配则消耗一个字符,否则不消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49068691/

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