Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式返回相同的重复答案_Javascript_Regex_Return_Instance - Fatal编程技术网

Javascript 正则表达式返回相同的重复答案

Javascript 正则表达式返回相同的重复答案,javascript,regex,return,instance,Javascript,Regex,Return,Instance,我正在用JavaScript正则表达式解析FortiGate日志,在返回重复值时遇到了一些问题。这是我的字符串: Jan 30 12:14:26 [23.4.56.4] date=2013-01-30,time=12:14:26,devname=FGT60C3G665236574,device_id=FGT60C3G665236574,log_id=0021000002,type=traffic,subtype=allowed,pri=notice,vd=root,src=10.10.89.10

我正在用JavaScript正则表达式解析FortiGate日志,在返回重复值时遇到了一些问题。这是我的字符串:

Jan 30 12:14:26 [23.4.56.4] date=2013-01-30,time=12:14:26,devname=FGT60C3G665236574,device_id=FGT60C3G665236574,log_id=0021000002,type=traffic,subtype=allowed,pri=notice,vd=root,src=10.10.89.107,src_port=59216,src_int=""internal"",dst=15.26.25.195,dst_port=53640,dst_int=""wan1"",SN=556987,status=accept,policyid=1,dir_disp=org,tran_disp=snat,proto=6,duration=120,sent=240,rcvd=238,sent_pkt=4,rcvd_pkt=3
我使用下面的正则表达式来获取devname

/devname=(.*?),/
这是我运行以下代码时返回的内容

var reDeviceName = /devname=(.*?),/;

var log3='Jan 30 12:14:26 [23.4.56.4] date=2013-01-30,time=12:14:26,devname=FGT60C3G665236574,device_id=FGT60C3G665236574,log_id=0021000002,type=traffic,subtype=allowed,pri=notice,vd=root,src=10.10.89.107,src_port=59216,src_int=""internal"",dst=15.26.25.195,dst_port=53640,dst_int=""wan1"",SN=556987,status=accept,policyid=1,dir_disp=org,tran_disp=snat,proto=6,duration=120,sent=240,rcvd=238,sent_pkt=4,rcvd_pkt=3';

console.log(log3.match(new RegExp(reDeviceName)));
这是返回的内容:

 [0] => devname=FGT60C3G665236574
 [1] => devname=
 [2] => FGT60C3G665236574
我怎么能把两者之间的东西都退回呢 devname=FGT60C3G665236574

只需返回您可以使用的信息FGT60C3G665236574的一个实例:

console.log(log3.match(new RegExp(reDeviceName))[1]);

请注意,实际数组没有您在问题中提到的第一个元素

请注意,您可以直接使用:

var reDeviceName = /devname=(.*?),/;

var log3='Jan 30 12:14:26 [23.4.56.4] date=2013-01-30,time=12:14:26,devname=FGT60C3G665236574,device_id=FGT60C3G665236574,log_id=0021000002,type=traffic,subtype=allowed,pri=notice,vd=root,src=10.10.89.107,src_port=59216,src_int=""internal"",dst=15.26.25.195,dst_port=53640,dst_int=""wan1"",SN=556987,status=accept,policyid=1,dir_disp=org,tran_disp=snat,proto=6,duration=120,sent=240,rcvd=238,sent_pkt=4,rcvd_pkt=3';

console.log(log3.match(redeviceName)[1]);

[省略
new RegExp()
constructor]

它返回
[“devname=FGT60C3G665236574,,“FGT60C3G665236574”]
,这很好,第一个索引始终包含完全匹配,当您有从索引1开始的捕获组时。获取FGT60C3G665236574的最佳方法是什么?正如您看到的,索引有3个条目,我怎么能只有1个呢?您当前的代码返回我在上面发布的数组,试试看。您所需要做的就是获取第二个索引:根本不需要在代码中的任何地方使用
newregexp
。赋值
reDeviceName=/blah/
已经是一个
RegExp
实例。@TedHopp哦,对不起,我认为它有点类似于python,因为如果必须多次使用RegExp,使用构造函数可以提高性能。现在一切都好了。