如何在JavaScript中反转正则表达式?
我有一个字符串a,想测试另一个字符串B是否不是它的一部分。这是一个非常重要的问题 简单的正则表达式,其结果可以在之后反转 我可以做到:如何在JavaScript中反转正则表达式?,javascript,regex,invert,Javascript,Regex,Invert,我有一个字符串a,想测试另一个字符串B是否不是它的一部分。这是一个非常重要的问题 简单的正则表达式,其结果可以在之后反转 我可以做到: /foobar/.test('foobar@bar.de') 然后把它倒过来,像这样: !(/foobar/).test('foobar@bar.de') 我的问题是,我需要在正则表达式中执行,而不是使用它们的结果。比如: /!foobar/.test('foobar@bar.de') (这不起作用) 换句话说:正则表达式应该测试是否不存在,并在这种情况
/foobar/.test('foobar@bar.de')
然后把它倒过来,像这样:
!(/foobar/).test('foobar@bar.de')
我的问题是,我需要在正则表达式中执行,而不是使用它们的结果。比如:
/!foobar/.test('foobar@bar.de')
(这不起作用)
换句话说:正则表达式应该测试是否不存在,并在这种情况下返回true
JavaScript是否可以实现这一点?试试:
/^(?!.*foobar)/.test('foobar@bar.de')
(简短)解释:
^ # start of the string
(?! # start negative look-ahead
.* # zero or more characters of any kind (except line terminators)
foobar # foobar
) # end negative look-ahead
因此,简单地说,如果可以“看到”字符串“foobar”,则正则表达式将从字符串的开头查看。如果可以“看到”,则不存在匹配项
*没有比赛,因为这是负面的展望
更多关于这种前瞻性的东西:但是请注意,JavaScript只支持look aheads,不支持look-behinds 如果您搜索的内容并不比“foobar”这样的简单字符串复杂: 将匹配不包含任何
word1
、word2
或word3
(并且您可以无限期扩展列表)的字符串。
但这也匹配空字符串。要拒绝空值,请使用
^(?!$)(?!.*(word1|word2|word3))
这是一个不平等的例子。
首先我隔离了接线员的尼斯-你能解释一下吗?Thx我从来没见过?!之前很好的回答很好,这正是我需要的。以前没有在JavaScript中尝试过负面前瞻。非常感谢+我在找你的一个regex职位来提升投票率——这似乎是一个合适的职位,因为它处理的是环顾四周。再次感谢。我希望每次用JS编写正则表达式时JavaScript都支持perl-like正则表达式注释。谢谢,但它需要是正则表达式,我只是稍微简化了示例。或者yourString.includes(“foobar”):)
^(?!.*(word1|word2|word3))
^(?!$)(?!.*(word1|word2|word3))
var _str = "a < b" ;
var _op = /</g ;
var _no_op = /[^(<|\ )]/g ;
console.log( _str, _str.match( _op ) ); // get '<'
console.log( _str, _str.match( _no_op ) ); // get 'a', 'b'