首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

关于正则表达式中的flags一部分-g

2012-12-23 
关于正则表达式中的flags部分-g语法是这样:使用RegExp的隐式构造函数,采用纯文本格式:/pattern/[flags]。fl

关于正则表达式中的flags部分-g
语法是这样:
使用RegExp的隐式构造函数,采用纯文本格式:/pattern/[flags]。
flags部分设置正则表达式的的标志信息,这个标志可以是g,m,i的组合,
g的作用是这样的:
g是全局标志。如果设置了这个标志,对某个文本执行搜索和替换操作时,将对文本中所有匹配的部分起作用。如果不设置这个标志,则仅搜索和替换最早匹配的内容

重点:经过测试,这个g只在文本搜索和替换操作时才有效,看下面

1.sar 1 10
SunOS HAZZ-PS-SV002-DNS-Beihuan 5.10 Generic_127111-09 sun4u    11/03/2010

11:35:57    %usr    %sys    %wio   %idle
11:35:58      14      12       0      75
11:35:59      14      15       0      72
11:36:00      15      13       0      73
11:36:01      13      11       0      77
11:36:02      14      14       0      73
11:36:03      14      12       0      75
11:36:04      14      13       0      74
11:36:05      14      12       0      75
11:36:06      14      13       0      74
11:36:07      13      12       0      76

Average       13      12       0      74
现在需要把CPU的平均空闲率匹配出来,记过计算,CPU的平均利用率也可以出来
这个正则表达式比较简单
var output='';
input=input.replace(/(^\s*|\s*$)/gi,'');
var reg=/Average\s+\d+\s+\d+\s+\d+\s+(\d+)/gmi
while(reg.exec(input)!=null)
{
output+=RegExp.$1+'\n'
}
出来的结果是74,没错
现在假设如果这个正则表达式匹配出两个值,如
Average       13      12       0      50
Average       13      12       0      74
这样子的形式
只想取出第一个的值,怎么取出呢?
开始是这样想的,按照g的解释,是不是在匹配的时候不设置这个g标志,在匹配的时候不是会匹配最早匹配的内容,可是发现这样不行,一把标志去掉,使用的Rhino工具就会卡死,具体不明白,但是这个g在文本搜索和替换操作时是有效的
随便测试下
aaaaa22bbbbb
写个表达式
var sep = '__';   
var output = '';
input = input.replace(/(^\s*)|(\s*$)/g, '');
input = input.replace(/2/, 't');
output=input
这里的input = input.replace(/2/, 't')用g和不用g是不一样的,用g两个都被替换了,不是只替换第一个
换另一种方法实现只匹配出第一个匹配到的值
使用if代替while
var output='';
input=input.replace(/(^\s*|\s*$)/gi,'');
var reg=/Average\s+\d+\s+\d+\s+\d+\s+(\d+)/gmi
if(reg.exec(input)!=null)
{
output+=RegExp.$1+'\n'
}

热点排行