关于一个正则表达式的问题
navigator.appVersion="4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)"varresult=navigator.ap...
navigator.appVersion="4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
var result = navigator.appVersion.replace(/.+(MSIE[^;]+).+/,"$1");
最好result的值为:MSIE 6.0
问下为什么,这个是如何解析匹配的。
谢谢回答,但是不是很详细,除了分组还有前后的“.”符合怎么匹配的,你也没有解释呀。还有“+”符号。 展开
var result = navigator.appVersion.replace(/.+(MSIE[^;]+).+/,"$1");
最好result的值为:MSIE 6.0
问下为什么,这个是如何解析匹配的。
谢谢回答,但是不是很详细,除了分组还有前后的“.”符合怎么匹配的,你也没有解释呀。还有“+”符号。 展开
1个回答
展开全部
在正则表达式中,用圆括号括起来的部分叫做分组,“$n”表示第n个分组的值
在你给出的正则表达式/.+(MSIE[^;]+).+/里面有一个分组:(MSIE[^;]+),所以“替换为”中的 $1 就是MSIE 6.0
不过如果以“?”开始分组是“非捕获性分组”【比如(?:msie[^;]+)】,$n就会忽略这些分组
【对问题补充的回答】
你之前没说这个,我以为你会知道……
在正则表达式里面
“.”表示任意内容(\n和\r除外,不过如果启用多行模式的话就连\n和\r都包括在内)
用方括号括起来的表示里面的任一字符,如果有“^”则表示“非”,即排除里面的字符
“+”表示一个或一个以上前面的内容。(如[^;]+表示一个或一个以上非“;”的字符)
至于其它的可以去查下相关资料
所以/.+(MSIE[^;]+).+/是匹配
一个以上任意字符 (紧接着)
MSIE 一个以上非;的字符(紧接着)
一个以上任意字符
即4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
不过分组只获取了MSIE 6.0的部分
可以把表达式里面的“.+”都去掉,得到/(MSIE[^;]+)/,也可以实现相同的功能
好好看下百度百科“正则表达式”,会有收获的
http://baike.baidu.com/view/94238.htm#2
在你给出的正则表达式/.+(MSIE[^;]+).+/里面有一个分组:(MSIE[^;]+),所以“替换为”中的 $1 就是MSIE 6.0
不过如果以“?”开始分组是“非捕获性分组”【比如(?:msie[^;]+)】,$n就会忽略这些分组
【对问题补充的回答】
你之前没说这个,我以为你会知道……
在正则表达式里面
“.”表示任意内容(\n和\r除外,不过如果启用多行模式的话就连\n和\r都包括在内)
用方括号括起来的表示里面的任一字符,如果有“^”则表示“非”,即排除里面的字符
“+”表示一个或一个以上前面的内容。(如[^;]+表示一个或一个以上非“;”的字符)
至于其它的可以去查下相关资料
所以/.+(MSIE[^;]+).+/是匹配
一个以上任意字符 (紧接着)
MSIE 一个以上非;的字符(紧接着)
一个以上任意字符
即4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
不过分组只获取了MSIE 6.0的部分
可以把表达式里面的“.+”都去掉,得到/(MSIE[^;]+)/,也可以实现相同的功能
好好看下百度百科“正则表达式”,会有收获的
http://baike.baidu.com/view/94238.htm#2
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询