我面临以下问题 - 我有一个序列:
[yyy]zyyyyz[yyy]zyyyyyyyyz[yyy]
这是我需要匹配的输入(除了[],我用来突出显示所需的匹配)。 我的正则表达式应该只匹配正好有3个字符的'y'序列。所以
yyy - should match
zyyyz - should match
zyyyy - should not match
yyyyz - should not match
实现正则表达式的第一部分很容易。当然
y{3}(?!y)
匹配y的所有序列,其中包含3个字符,后面没有y。问题是javascript不支持lookbehinds所以没有简单的方法来检查前面的字符...如何实现这一点?我想我无法反转字符串...我的意思是可以有多个匹配序列,不仅仅是一个,所以它不会有任何好处。
答案 0 :(得分:2)
不幸的是,我认为不可能在JavaScript中为精确匹配(组0)。但是,(?:[^y]|^)(y{3})(?!y)
应该将组1与所有情况的要求相匹配,包括两个实例由单个非y
,字符串开头和字符串结尾分隔。等价地,([^y]|^)(y{3})(?!y)/
将匹配组2,如果您正在进行替换,则组1将恢复正则表达式需要使用的第一个字符。例如:
var re = /([^y]|^)(y{3})(?!y)/g;
"yyy0yyy0000yyyyyy00yy0yyyy0000yyy".replace(re, "$1---")
// => "---0---0000yyyyyy00yy0yyyy0000---"
"[yyy]zyyyyz[yyy]zyyyyyyyyz[yyy]".replace(re, "$1---")
// => "[---]zyyyyz[---]zyyyyyyyyz[---]"
"yyyzyyyyzyyyzyyyyyyyyzyyy".replace(re, "$1---")
// => "---zyyyyz---zyyyyyyyyz---"
答案 1 :(得分:0)
匹配 ...所以您正在尝试验证输入。 TRUE
当字符串中有三个孤立的y
序列,否则返回FALSE
。
然后我来了这个正则表达式:
(?=(?:[^y]|^)(yyy)(?:[^y]|$))
您还可以使用所有已捕获的yyy
群组。
<强> Live demo 强>