2009-10-08 31 views
33

我有一個字符串A,並想測試另一個字符串B是否不屬於它。這是一個非常簡單的正則表達式,其結果可以在之後反轉。如何反轉JavaScript中的正則表達式?

我可以這樣做:

/foobar/.test('[email protected]') 

事後反轉,就像這樣:

!(/foobar/).test('[email protected]') 

我的問題是,我需要在正則表達式中做到這一點,而不是與他們的結果。喜歡的東西:

/!foobar/.test('[email protected]') 

(不工作)

換句話說,正則表達式應該測試爲不存在,並在這種情況下返回true。

這是可能與JavaScript?

回答

44

嘗試:

/^(?!.*foobar)/.test('[email protected]') 

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只支持預見,不會看到落後於

+0

不錯 - 你能解釋一下嗎? – jantimon 2009-10-08 15:28:29

+0

Thx我從未見過?!之前。很好的答案 – jantimon 2009-10-08 15:35:00

+0

太棒了,這正是我所需要的。之前在JavaScript中沒有嘗試過負面的lookahead。非常感謝! – acme 2009-10-09 08:36:26

0

如果你正在尋找真不是比簡單的字符串,如「foobar的」更爲複雜:

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

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

+0

謝謝,但它需要是一個正則表達式,我只是簡化了一點例子。 – acme 2009-10-09 08:31:26

+0

或yourString.includes(「foobar」):) – rogerdpack 2016-10-27 23:47:14

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

將匹配不包含任何字符串word1,word2word3(並且您可以無限期地擴展該列表)。 但是這也匹配空字符串。拒絕空值使用

^(?!$)(?!.*(word1|word2|word3)) 
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 .:我只是在逆表達式中添加空格,以便檢索操作數的精確匹配。

相關問題