繁体   English   中英

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

[英]How can I invert a regular expression in 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任何一个的字符串(并且您可以无限期扩展列表)。 但这也匹配空字符串。 拒绝null使用

^(?!$)(?!.*(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:我只是在逆表达式中添加了空格,以便检索操作数的精确匹配。

如果您要搜索的内容实际上并不比“ foobar”之类的简单字符串复杂:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM