문제

나는 줄이있다 :

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)

문자열에있는 Firefox의 버전이 무엇인지 알고 싶습니다 (3.5.2).

내 현재 동정형은 다음과 같습니다.

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

그리고 그것은 돌아옵니다 Firefox/3.5.2

나는 단지 돌아 오기를 원합니다 3.5.2 Firefox 버전에서 문자열의 다른 버전이 아닙니다. 이미 브라우저가 Firefox라는 것을 알고 있습니다.

도움이 되었습니까?

해결책

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

전체 경기 (LookBehind 사용 - 모든 재전스 풍미, 특히 JavaScript에서 사용할 수는 없음)로 3.5.2가 반환됩니다.

따라서 JavaScript 여야한다면 검색하십시오. Firefox/(\d+(?:\.\d+)+) 그리고 일치 번호를 사용하십시오. 1.

이론적으로는 둘 이상의 숫자가있을 수 있기 때문에 (예 : 버전 3.10.0), Regex의 해당 부분을 변경하여 각 숫자에 대해 하나 이상의 숫자를 허용합니다. 또한 슬래시를 피할 필요가 없습니다.

다른 팁

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

위에서 ()와 같이 숫자 주위에 캡처 그룹을 만듭니다. 그런 다음 원하는 정규식은 반환되는 배열의 두 번째 인덱스에 있습니다. 예를 들어 제로 기반 언어 MatchedArray [1] 및 또는 1 개의 언어는 MatchedArray [2

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

그리고 일치 #1을 추출하지만, 이것은 당신의 (JavaScript의 용의자) Regex 엔진에서 당신의 (지정되지 않은)에서 수행됩니다. 또는 이것이 매우 성가신 경우, REGEX가 LookBehind를 지원합니다.

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

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

당신의 언어에 따라 (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

또한 이와 같은 두 개의 버전 숫자 만있는 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

이를 바탕 으로이 REGEX 패턴을 생각해 냈습니다.

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

2-3 레벨 및 숫자> 10의 모든 버전 번호와 일치하지만 2 단계 또는 3 레벨의 문자도 허용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top