Javascript正则表达式匹配以某些字符结尾但不与这些字符的特定组合结束的字符串

nim*_*cap 13 javascript regex

假设使用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]*/中结束