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

我有一个字符串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'可以被“看到”,则该正则表达式将从字符串的开头看。 如果可以“看到”, 则不存在 *匹配。

*不匹配,因为它是负面预测!

更多关于这个先行的东西:http://www.regular-expressions.info/lookaround.html但需要注意的是JavaScript的只支持查找aheads,没有look- 屁股


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

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

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

这是一个不平等的例子。 首先,我将操作符'<',后面的操作数'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:我只是在逆表达式中添加了空格,以便检索操作数的精确匹配。

链接地址: http://www.djcxy.com/p/76713.html

上一篇: How can I invert a regular expression in JavaScript?

下一篇: Regex Match all characters between two strings