2016-08-15 6 views
0

Javascriptで正規表現に問題があります。 StringからIPアドレスを取得する必要があります。 regex101.comで正規表現をテストしたところ、すべて正常に動作しました。私はJavascriptの正規表現は偽を返し続けます

console.log(regex.test('127.0.0.1:8080/test')); 

結果は常に偽である必要があり

var regex = new RegExp('(\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b:[0-9]+)|(localhost:[0-9]+)', 'i'); 

そして、ここでは抜粋です:

は、ここに私の正規表現です。

私はいくつかの方法を試しました、string.match、regexパッケージv0.1.1でも。

紛失しているものがありますか?

ありがとうございます。

+0

一致する文字列の部分はどれですか? – guest271314

+0

もう1つの可能性があります:http://stackoverflow.com/q/37516721/5743988 – 4castle

+0

私は、文字列の先頭からIPアドレスを探したいと思います。 – ElCapitaine

答えて

1

問題は、バックスラッシュをエスケープしていないということです。

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 

ここでの根本的な問題は、バックスラッシュではJavaScript に両方の正規表現に、エスケープ文字として特別な意味を持っていることです。

JavaScriptでは、'\b'が表示されている場合、それをエスケープ文字(この場合はバックスペース文字)として解釈します。この解釈はの前に発生し、の前に発生し、RegExpエンジンに渡されます。

したがって、バックスラッシュを2倍にしてエスケープする必要があります。

+0

はい、これです、ありがとうございます! – ElCapitaine