假设使用Javascript,我想匹配一个以[abcde]*但不以的字符串abc.
所以,正则表达式应该匹配xxxa,xxxbc,xxxabd但不是xxxabc.
我完全糊涂了.
编辑:由于某种原因我必须使用正则表达式,我不能做某事if (str.endsWith("abc"))
pol*_*nts 29
解决方案很简单:使用否定前瞻:
(?!.*abc$)
Run Code Online (Sandbox Code Playgroud)
这断言字符串不以abc.
你提到你还需要以字符串结尾[abcde]*,但这*意味着它是可选的,所以xxx匹配.我假设你真的想要[abcde]+,这也只是意味着它需要结束[abcde].在这种情况下,断言是:
(?=.*[abcde]$)(?!.*abc$)
Run Code Online (Sandbox Code Playgroud)
见regular-expressions.info为正负lookarounds教程.
我不愿意提供实际的Javascript正则表达式,因为我不熟悉该语言(尽管我确信断言,如果支持,将起作用 - 根据regular-expressions.info,Javascript支持正面和负面的预测).感谢Pointy和Alan Moore的评论,我认为正确的Javascript正则表达式是这样的:
var regex = /^(?!.*abc$).*[abcde]$/;
Run Code Online (Sandbox Code Playgroud)
请注意,此版本(归功于Alan Moore)不再需要积极的前瞻性.它只是匹配.*[abcde]$,但首先断言^(?!.*abc$).
mač*_*ček 15
问题没有正确定义,或者每个人都忽略了一个简单的答案.
var re = /abc$/;
!re.test("xxxa"); // pass
!re.test("xxxbc"); // pass
!re.test("xxxabd"); // pass
!re.test("xxxabc"); // fail
Run Code Online (Sandbox Code Playgroud)
所有这些都以/[abcde]*/中结束