Eu tenho um problema com o regex em Javascript. Eu preciso recuperar um endereço IP de uma String. Eu testei meu regex com regex101.com e tudo funciona bem.
Aqui está o meu regex:
var regex = new RegExp("(b(?:[0-9]{1,3}.){3}[0-9]{1,3}b:[0-9]+)|(localhost:[0-9]+)", "i");
E aqui está o trecho que tenho
console.log(regex.test("127.0.0.1:8080/test"));
O resultado é sempre falso.
Eu tentei vários métodos, string.match, o pacote regex v0.1.1 também.
Há algo que eu esteja perdendo?
Obrigado.
Respostas:
1 para resposta № 1O problema é que você não escapou de suas barras invertidas.
var regex = new RegExp("(\b(?:[0-9]{1,3}.){3}[0-9]{1,3}\b:[0-9]+)|(localhost:[0-9]+)", "i");
console.log(regex.test("127.0.0.1:8080/test"));
> true
O problema fundamental aqui é que a barra invertida tem um significado especial como um caractere de escape, tanto para JavaScript e para RegExp.
Então, quando o JavaScript vê seu "b"
, interpreta-o como um caractere de escape - neste caso, um caractere de retrocesso. Essa interpretação acontece antes ele chega ao mecanismo RegExp.
Então, você precisa escapar de suas barras invertidas, dobrando-as.