Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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 匹配引号中逗号的JS正则表达式_Javascript_Json_Node.js_Regex - Fatal编程技术网

Javascript 匹配引号中逗号的JS正则表达式

Javascript 匹配引号中逗号的JS正则表达式,javascript,json,node.js,regex,Javascript,Json,Node.js,Regex,我正在尝试获取基于文本的日志文件,如下所示: 键入:“单击”,类别:“刷新门”,描述:“单击刷新自” 门0124',站点:'mysite',路径名:'/load_areas/all/doors',参数: “?排序依据=代码和布局=查看依据4”,时间:'1515838628166',移动: 'false',bp:'xlarge',大小:'[1920935]',区域:'all',sid: “15158225889”,设施:“MMMM”,IP地址:“XXX.XXX.XXX.XXX”, 创建日期:201

我正在尝试获取基于文本的日志文件,如下所示:

键入:“单击”,类别:“刷新门”,描述:“单击刷新自” 门0124',站点:'mysite',路径名:'/load_areas/all/doors',参数: “?排序依据=代码和布局=查看依据4”,时间:'1515838628166',移动: 'false',bp:'xlarge',大小:'[1920935]',区域:'all',sid: “15158225889”,设施:“MMMM”,IP地址:“XXX.XXX.XXX.XXX”, 创建日期:2018年1月13日04:17

并遍历它以从中构建JSON对象。当我在上面的条目上使用log.split(“,”)从字符串的各个部分创建单独的对象时,它会获取日期并将其拆分,从而分解数据

什么是在单引号中查找逗号的正则表达式,我可以在尝试将此字符串拆分为JS数组之前替换它

我基本上想把“2018年1月13日04:17”改为“1月13日”;2018 04:17',并担心以后的转换

我试过这样的表达:

'([^']*)'

这需要引号之间的所有内容,但我不能只针对引号之间的逗号。

您可以先用一些独特的名称替换有问题的逗号,然后用它拆分。最后,我们在各个部分上循环并实际构建我们的对象:
var subject=“type:'click',category:'REFRESH_DOOR',desc:'clicked REFRESH from DOOR 0124',site:'mysite',pathname:'/load_areas/all/doors',params:'?sort_by=code&layout=view_by_4',time:'1515838628166',mobile:'false',bp:'xlarge',size:'[1920 935]'区域:'all',sid:'15158225889',设施:'MMMM',IP地址:'XXX.XXX.XXX.XXX',创建:'2018年1月13日04:17';
var regex=/'[^']+'|(,)/g;
var-kv=/(\w+)::\s*'([^']+)'/;
replaced=subject.replace(regex,function(m,group1){
if(typeof group1=='undefined')返回m;
否则返回“超人”;
});
//创建一个保存我们的值的对象
var jsonObject={};
//创建一个拆分单个项的函数
功能拆分器(项目){
var匹配=千伏执行器(项目);
jsonObject[match[1]]=match[2];
}
零件=更换。拆分(“超人”);
零件。forEach(分离器);

log(jsonObject)
我将正则表达式稍微更改为
/'.'.'/g
,因此它选择引号内的任何内容,然后我们只需对其进行替换,以查找所有逗号并用分号替换它们

var str=“type:'click',category:'REFRESH_DOOR',desc:'clicked REFRESH from DOOR 0124',site:'mysite',pathname:'/load_areas/all/doors',params:'?sort_by=code&layout=view_by_4',time:'1515838628166',mobile:'false',bp:'xlarge',size:'[1920 935]'区域:'all',sid:'15158225889',设施:'MMMM',IP地址:'XXX.XXX.XXX.XXX',创建:'2018年1月13日04:17';
//选择所有带引号的字符串。。。
var replacedCommas=str.replace(/'.'?'/g,函数(匹配){
//现在用分号替换每个匹配中的逗号
返回匹配。替换(/,/g,,;);
});

console.log(replacedCommas)
@ChrisWest:如果它对你有效,那么你可能想要接受或投票表决答案(左边绿色勾号)。你为什么需要
。你就不能只做
。.*
?这个
让它不那么贪婪。如果没有它,它将尝试匹配尽可能多的字符,因为
匹配每个字符。正则表达式
'.*
很可能匹配整个字符串中的第一个引号,然后匹配该引号和最后一个引号之间的所有内容,因为引号也匹配
*
模式。添加
使上一个模式(
*
)与尽可能少的字符匹配。这意味着它将匹配一个报价,然后匹配其他任何内容,直到遇到另一个报价。基本上,它保证它停止,下一个报价,而不是最后一个报价。哦,有趣。谢谢