我怎样才能反转在JavaScript正则表达式?(How can I invert a regula

2019-07-21 11:45发布

我有一个字符串A和希望测试另一个字符串B是不是它的一部分。 这是一个非常简单的正则表达式,其结果可随后反转。

我可以:

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

事后反转,就像这样:

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

我的问题是,我需要在正则表达式中,而不是与他们的结果去做。 就像是:

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

(不工作)

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

这可能与JavaScript的?

Answer 1:

尝试:

/^(?!.*foobar)/.test('foobar@bar.de')

A(短)说明:

^          # 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的只支持查找aheads,没有look- 屁股



Answer 2:

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

将匹配不包含任何的字符串word1word2 ,或word3 (你可以无限期延长该列表)。 但是,这也匹配空字符串。 要拒绝使用空

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


Answer 3:

下面是一个不平等的一个例子。 首先,我隔离操作“<”,以后操作数“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'

PS:我只是说在逆表达的空白,为检索操作数精确匹配。



Answer 4:

如果你正在寻找真不是比简单的字符串,如“foobar的”更复杂的:

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

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



文章来源: How can I invert a regular expression in JavaScript?