Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中反转正则表达式?_Javascript_Regex_Invert - Fatal编程技术网

如何在JavaScript中反转正则表达式?

如何在JavaScript中反转正则表达式?,javascript,regex,invert,Javascript,Regex,Invert,我有一个字符串a,想测试另一个字符串B是否不是它的一部分。这是一个非常重要的问题 简单的正则表达式,其结果可以在之后反转 我可以做到: /foobar/.test('foobar@bar.de') 然后把它倒过来,像这样: !(/foobar/).test('foobar@bar.de') 我的问题是,我需要在正则表达式中执行,而不是使用它们的结果。比如: /!foobar/.test('foobar@bar.de') (这不起作用) 换句话说:正则表达式应该测试是否不存在,并在这种情况

我有一个字符串a,想测试另一个字符串B是否不是它的一部分。这是一个非常重要的问题 简单的正则表达式,其结果可以在之后反转

我可以做到:

/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'