Javascript 正则表达式:交替和嵌套
Javascript Regular Expression: alternation and nesting
这是我到目前为止得到的:
/(netscape)|(navigator)'/('d+)('.('d+))?/.test(UserAgentString.toLowerCase()) ? ' netscape'+RegExp.$3+RegExp.$4 : ''
我正在尝试在这里做几件不同的事情。
(1).我想匹配netscape
或navigator
,并且后面必须跟一个斜杠和一个或多个数字。
(2). 可以选择在这些数字后面跟最多一个:一个句点和一个或多个数字。
如果 (1) 不为 true,则表达式的计算结果应为空字符串。
如果表达式Netscape/8
或Navigator/8
,表达式应返回' netscape8'
UserAgentString
。
如果表达式Navigator/8.4.2
UserAgentString
则返回' netscape8.4'
。
正则表达式不起作用。特别是(这是我测试的编辑版本,但它仍然不起作用):
// in Chrome this produces ["netscape", "netscape", undefined, undefined]
(/(netscape)|(navigator)'/('d+)/.exec("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.7.5) Gecko/20060912 Netscape/8.1.2".toLowerCase()))
为什么8
不匹配?它应该出现在第三个条目还是第四个条目中?
我想弄清楚它们是否受支持。请注意,我有 5 组捕获参数组。组 #5 'd+
包含在组 #4: '.('d+)
中。是否可以检索匹配的组?
另外,如果我指定这样的组会发生什么? /('.'d+)*/
这匹配任意数量的"点号"字符串(如版本号)。RegExp.$1
应该在这里匹配什么?
你的"or"表达并没有按照你的想法做。
简化,您正在这样做:
(a)|(b)cde
哪个匹配a
或bcde
.
在你的"or"表达式两边加上括号:((a)|(b))cde
,这将匹配acde
或bcde
。
我发现 http://regexpal.com/是快速检查我的正则表达式语法的非常有用的工具。
则表达式(netscape|navigator)'/('d+(?:'.'d+)?)
将返回 2 组(如果找到匹配项):
- Netscape 或 Navigator
名称后面的数字
var m = /(netscape|navigator)'/('d+(?:'.'d+)?)/.exec(text); if (m != null) { var r = m[1] + m[2]; }
(....)
创建一个组。 该组内的所有内容都使用该组的变量返回。
以下内容将匹配netscape
或navigator
以及版本的前两个数字,以句点分隔。
$1 $2
|------------------| |------------|
/(netscape|navigator)[^'/]*'/(('d+)'.('d+))/
最终代码如下所示:
/(netscape|navigator)[^'/]*'/(('d+)'.('d+))/.test(
navigator.userAgent.toLowerCase()
) ? 'netscape'+RegExp.$2 : ''
这会给你
netscape5.0
看看这些很棒的tuts(还有更多):
- http://perldoc.perl.org/perlrequick.html
- http://perldoc.perl.org/perlre.html
- http://perldoc.perl.org/perlretut.html
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 为什么嵌套括号会导致此正则表达式中的空字符串
- Javascript 正则表达式:交替和嵌套
- 在正则表达式中创建第 n 级嵌套模式的算法
- 正则表达式提取带有嵌套函数(javascript)的函数表示法
- 可以使用什么 Javascript 正则表达式模式来捕获可能嵌套括号中的文本
- 正则表达式:嵌套标签
- 使用正则表达式替换XML属性内错误字符串中的嵌套引号
- 用于匹配有限深度嵌套字符串的正则表达式——缓慢、崩溃的行为
- JS正则表达式匹配大括号内的所有内容(包括嵌套大括号):"{我想要这个{和这个}和这个在一个字符串中}&quo
- Python正则表达式.用另一个嵌套函数匹配js函数体
- 如何在这个基于正则表达式的JSON到XML转换器中处理嵌套数组
- 嵌套括号的正则表达式
- 在正则表达式中嵌套 OR
- 正则表达式中的深度嵌套组
- 如何使用正则表达式获得多个嵌套的打开和关闭标记
- 提取HTML并使用php函数或正则表达式来获得HTML打开和关闭标记,不支持的标记,嵌套标记