我怎样才能反转在JavaScript正则表达式?
-
20-09-2019 - |
题
我有一个字符串A和要测试是否另一个字符串B是不是它的一部分。这是一个非常 简单的regex,其结果可以事后被反转。
我可以这样做:
/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))
将匹配不包含任何word1
,word2
,或word3
的一个字符串(和可以无限期延长该列表)。
但是,这也匹配空字符串。要拒绝空值使用
^(?!$)(?!.*(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'
P.S。:我刚添加在逆表达空白空间中,为了检索操作数精确匹配。
如果你正在寻找真不是比简单的字符串,如“foobar的”更复杂的:
if (yourString.indexOf("foobar") === -1) {
// ...
}
不隶属于 StackOverflow