繁体   English   中英

与引号内的逗号匹配的JS RegEx

[英]JS RegEx that matches commas within quotes

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

类型:“单击”,类别:“ REFRESH_DOOR”,desc:“单击刷新从0124门”,站点:“ mysite”,路径名:“ / load_areas / all / doors”,参数:“?sort_by = code&layout = view_by_4”,时间:“ 1515838628166”,移动设备:“ false”,bp:“ xlarge”,大小:“ [1920,935]”,区域:“ all”,sid:“ 15158225889”,设施:“ MMMM”,IP地址:“ XXX.XXX.XXX.XXX”,创建时间:“ 2018年1月13日04:17”

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

在单引号内找到逗号的RegEx将是什么,在尝试将此字符串拆分为JS数组之前可以将其替换?

我基本上想更改:将'January 13,2018 04:17'更改为'January 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]', area: 'all', sid: '15158225889', facility: 'MMMM', IP Address: 'XXX.XXX.XXX.XXX', created: 'January 13, 2018 04:17'"; var regex = /'[^']+'|(,)/g; var kv = /(\\w+):\\s*'([^']+)'/; replaced = subject.replace(regex, function(m, group1) { if (typeof group1 == 'undefined') return m; else return 'SUPERMAN'; }); // create an object that holds our values var jsonObject = {}; // create a function that splits the individual items function splitter(item) { var match = kv.exec(item); jsonObject[match[1]] = match[2]; } parts = replaced.split("SUPERMAN"); parts.forEach(splitter); console.log(jsonObject); 

产生:

 { "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]", "area": "all", "sid": "15158225889", "facility": "MMMM", "Address": "XXX.XXX.XXX.XXX", "created": "January 13, 2018 04:17" } 


改编自最佳Regex技巧

我将正则表达式稍微更改为/'.*?'/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]', area: 'all', sid: '15158225889', facility: 'MMMM', IP Address: 'XXX.XXX.XXX.XXX', created: 'January 13, 2018 04:17'"; //Select all quoted strings... var replacedCommas = str.replace(/'.*?'/g, function(match){ //Now replace any commas found in each match with semicolons return match.replace(/,/g, ';'); }); console.log(replacedCommas); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM