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

时间:2009-10-08 15:20:42

标签: javascript regex invert

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

我能做到:

/foobar/.test('foobar@bar.de')

然后将其反转,如下:

!(/foobar/).test('foobar@bar.de') 

我遇到的问题是,我需要在正则表达式中进行,而不是使用结果。类似的东西:

/!foobar/.test('foobar@bar.de')

(不起作用)

换句话说:正则表达式应测试不存在,并在这种情况下返回true。

这可以用JavaScript吗?

4 个答案:

答案 0 :(得分:58)

尝试:

/^(?!.*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'可以被“看到”,那么正则表达式将从字符串的开头看。如果可以“看到”,则没有 *匹配。

*不匹配,因为它是否定预测!

有关此前瞻性内容的更多信息:http://www.regular-expressions.info/lookaround.html但请注意,JavaScript仅支持预见,不支持 - 支持

答案 1 :(得分:1)

^(?!.*(word1|word2|word3))

将匹配不包含任何word1word2word3的字符串(您可以无限期地扩展列表)。 但是这也匹配空字符串。要拒绝空值,请使用

^(?!$)(?!.*(word1|word2|word3))  

答案 2 :(得分:1)

这是一个不平等的例子。 首先,我将运算符'<'隔离,后来操作数'a'和'b'。 基本上,我采用直接表达式,将其包含在右括号中,用“^”反转后者,最后将结果表达式嵌入方括号中,因为开头的'^'将被不同地解释。

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'

P.s。:我刚刚在逆表达式中添加了空格,以便检索操作数的精确匹配。

答案 3 :(得分:0)

如果您正在搜索的内容并不比像“foobar”这样的简单字符串更复杂:

if (yourString.indexOf("foobar") === -1) {
  // ...
}

http://www.w3schools.com/jsref/jsref_indexOf.asp