问题描述
|
我在这种格式的日志文件中有多行文本:
topic,this is the message part,with,occasional commas.
如何从第一个逗号分割字符串,以便将主题和消息的其余部分放入两个不同的变量中?
我已经尝试过使用这种拆分,但是当消息部分中的逗号更多时,它将不起作用。
[topic,message] = whole_message.split(\",\",2);
解决方法
使用可获取“除第一个逗号以外的所有内容”的正则表达式。所以:
whole_message.match(/([^,]*),(.*)/)
主题为“ 3”,消息为主题“ 4”。
,这种分解分配在Javascript中不起作用(目前)。尝试这个:
var split = whole_message.split(\',\',2);
var topic = split[0],message = split[1];
编辑—好的,所以\“ split()\”有点坏了;尝试这个:
var topic,message;
whole_message.replace(/^([^,]*)(?:,(.*))?$/,function(_,t,m) {
topic = t; message = m;
});
,javascript的String.split()
方法已损坏(至少如果您期望与其他语言的split()
方法提供相同的行为)。
此行为的一个示例:
console.log(\'a,b,c\'.split(\',2))
> [\'a\',\'b\']
并不是
> [\'a\',\'b,c\']
就像您期望的那样。
尝试使用以下拆分功能:
function extended_split(str,separator,max) {
var out = [],index = 0,next;
while (!max || out.length < max - 1 ) {
next = str.indexOf(separator,index);
if (next === -1) {
break;
}
out.push(str.substring(index,next));
index = next + separator.length;
}
out.push(str.substring(index));
return out;
};
,这里!
String.prototype.mySplit = function(char) {
var arr = new Array();
arr[0] = this.substring(0,this.indexOf(char));
arr[1] = this.substring(this.indexOf(char) + 1);
return arr;
}
str = \'topic,this is the message part,with,occasional commas.\'
str.mySplit(\',\');
-> [\"topic\",\" this is the message part,occasional commas.\"]
,var a = whole_message.split(\",\");
var topic = a.splice (0,1);
(除非您喜欢用复杂的方式做事)
,为什么不按逗号分隔,将[0]项目作为主题,然后从原始字符串中删除topic(+,)?
你可以:
var topic = whole_message.split(\",\")[0]
(使用prototype.js)
var message = whole_message.gsub(topic+\",\",\"\")
(使用jQuery)
whole_message.replace(topic+\",\"\")
或更快速地选择josh.trow