Javascript - Regexes和lazyness

时间:2017-03-20 15:18:57

标签: javascript regex

我需要一个正则表达式,它匹配包含子字符串" abc"的字符串,但不是子字符串" abcdef"或" abcghi"。我能找到的最佳解决方案是:

/^.*abc(?!def|ghi).*$/i

但是,这个wronlgy匹配以下字符串:

xxxabcxabcdefxx

我的正则表达式被" abcx"的幻象愚弄了。字符串,女巫包含" abc"后面没有禁用的后缀。 我尝试过使用" +"和"?"修饰语无济于事。

我想我可以通过使用没有通配符的正则表达式,并将匹配的字符串与完整字符串进行比较来解决这个问题,但我发现这个解决方案似乎有点......修补了。

2 个答案:

答案 0 :(得分:0)

为什么不搜索不包含字符串abcdef和abcghi的字符串:

.*(abcdef|abcghi).*

并排除那些?

答案 1 :(得分:0)

var a = 'xxxabcxabcdefxx';
if (/abc(?:def|ghi)/g.test(a))
	console.log( /^.*(abc(?:def|ghi)).*/g.exec(a))