Pergunta

Eu tenho uma string a e quero testar se outra string b não faz parte dela. Este é um regex muito simples cujo resultado pode ser invertido posteriormente.

Eu poderia fazer:

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

e invertê -lo depois, assim:

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

O problema que tenho é que preciso fazê -lo dentro da expressão regular e não com o resultado deles. Algo como:

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

(que não funciona)

Em outras palavras: a expressão regular deve testar uma inexistência e retornar verdadeiro nesse caso.

Isso é possível com JavaScript?

Foi útil?

Solução

Tentar:

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

Uma explicação (curta):

^          # start of the string 
(?!        # start negative look-ahead
  .*       # zero or more characters of any kind (except line terminators)
  foobar   # foobar
)          # end negative look-ahead

Então, em inglês simples, que Regex olhará desde o início da string se a string 'Foobar' puder ser "vista". Se pode ser "visto", existe não* Combine.

* sem correspondência porque é negativo olhe para frente!

Mais sobre essa aparência seguida: http://www.regular-expressions.info/lookAround.html Mas observe que o JavaScript suporta apenas a aparência, sem olhar-atrasado!

Outras dicas

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

corresponderá a uma string que não contém nada word1, word2, ou word3 (e você pode estender a lista indefinidamente). Mas isso também corresponde às cordas nulas. Para rejeitar os nulos de uso

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

Aqui está um exemplo de desigualdade. Primeiro, isole o operador '<', mais tarde os operandos 'a' e 'b'. Basicamente, tomo a expressão direta, incluo -a nos parênteses certos, inverto o último por '^' e finalmente incorporo a expressão resultante em colchetes, porque o '^' no início seria interpretado de maneira diferente.

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: Acabei de adicionar o espaço em branco na expressão inversa, a fim de recuperar a correspondência exata para os operando.

Se o que você está procurando realmente não é mais complicado do que uma corda simples como "Foobar":

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top