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

abd@ajk@应该匹配

abd@@ajk:没有匹配项

abd@@@ajk:最终的@应该匹配。

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

细节


(?:-与两个备选方案之一匹配的非捕获组的开始:


[^ @] - any char other than @`
|-或
@@-2 @

)+-重复匹配1次或更多次。


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

09-10 16:41
查看更多