質問

私は、文字列を持っています:

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)

私は、文字列(3.5.2)であるのFirefoxのバージョンを知りたい。

私の現在の正規表現があります:

Firefox\/[0-9]\.[0-9]\.[0-9]

と、それはFirefox/3.5.2を返します。

私はそれがFirefoxのバージョンではなく、文字列内の他のバージョンから3.5.2を返すようにしたいです。私はすでに、ブラウザは、Firefoxで知っています。

役に立ちましたか?

解決

(?<=Firefox/)\d+(?:\.\d+)+

は、( - しかし、すべての正規表現のフレーバーで利用できない、特にJavaScriptの後読みを使用して)マッチ全体として3.5.2を返します。

だから、それは、JavaScriptのことFirefox/(\d+(?:\.\d+)+)を検索し、一致を使用する必要がある場合。 1。

理論的には、複数の桁(たとえば、バージョン3.10.0)があるかもしれないので、

、私はまた、各番号に1つの以上の数字を考慮して、正規表現の一部を変更しました。また、スラッシュをエスケープする必要はありません。

他のヒント

Firefox\/([0-9]\.[0-9]\.[0-9])
私は上記のように行っている。

()数字の周りのキャプチャグループを作成します。そして、あなたがしたい正規表現が返される配列内の2番目のインデックスになります。例えば、ゼロベースの言語matchedArray [1]又は1つのベースの言語そのmatchedArray [2]

Firefox\/([0-9]\.[0-9]\.[0-9])
正規表現エンジン(1ではJavaScriptを疑うものの、未指定)

とマッチ#1を抽出し、しかし、これはあなたの中で行われています。それとも、これを行うのは非常に迷惑である場合、そしてあなたの正規表現は、後読みサポートしています:

(?<=Firefox\/)[0-9]\.[0-9]\.[0-9]

Firefox\/([0-9]\.[0-9]\.[0-9])

これは、配列の2番目の要素になるだろう(私はjsファイルを仮定している)あなたの言語に応じて、

すなわちます。


var regex = /Firefox\/([0-9]\.[0-9]\.[0-9])/
var matches = useragent.match(regex);
alert(matches[1]); // 3.5.2

時々、ユーザーエージェントはまた例えば、文字が含まれています。

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b9pre) Gecko/20101228 Firefox/4.0b9pre

Internet Explorerは、私はバージョン情報の一部として、文字を見てきた唯一のブラウザです。

Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0 ; .NET CLR 2.0.50215; SL Commerce Client v1.0; Tablet PC 2.0

また、このような2つだけバージョンの数字とFirefoxのユーザーエージェント文字列があることができます:

Mozilla/5.0 (X11; U; Linux armv7l; en-US; rv:1.9.2a1pre) Gecko/20091127 Firefox/3.5 Maemo Browser 1.5.6 RX-51 N900

私はこの正規表現パターンを思い付いたことに基づいて、

Firefox\/([\d]+\.[\w]?\.?[\w]+) 

これは> 10 2-3レベルと数字で任意のバージョン番号と一致するだけでなく、第2または第3レベルの文字を許可します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top