Javascript 从第一次出现的字符中拆分字符串
我在这种格式的日志文件中有多行文本:Javascript 从第一次出现的字符中拆分字符串,javascript,regex,split,Javascript,Regex,Split,我在这种格式的日志文件中有多行文本: topic, this is the message part, with, occasional commas. 如何从第一个逗号分割字符串,以便将主题和消息的其余部分放在两个不同的变量中 我尝试过使用这种拆分,但是当消息部分中有更多逗号时,它就不起作用了 [topic, message] = whole_message.split(",", 2); 这种分解分配在Javascript中不起作用(目前)。试试这个: var split = whole_
topic, this is the message part, with, occasional commas.
如何从第一个逗号分割字符串,以便将主题和消息的其余部分放在两个不同的变量中
我尝试过使用这种拆分,但是当消息部分中有更多逗号时,它就不起作用了
[topic, message] = whole_message.split(",", 2);
这种分解分配在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;
});
使用“除第一个逗号外的所有内容”的正则表达式。因此:
[1]
将成为主题,[2]
将成为信息。这里
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, with, occasional commas."]
为什么不用逗号分隔,将[0]项作为主题,然后从原始字符串中删除主题(+,) 你可以:
var topic = whole_message.split(",")[0]
(使用prototype.js)
(使用jQuery)
或者更快,使用josh.trowjavascript的
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;
};
函数扩展_分割(str,分隔符,最大值){
var out=[],
指数=0,
下一个
而(!max | | out.length
(除非你喜欢用复杂的方式做事)为什么
split(“,”,2)
不适合你?@jjnguy可能是因为这个赋值语句完全是假的:-)JavaScript!=Python:-)@jjnguy,因为如果整个消息类似于“mighty topic,hi,我是用户”,则topic变量将包含“mighty topic”,消息将只包含“hi”,而不是“hi,我是用户”。@Martijn:除非您使用的是Javascript 1.7+解释器、CoffeScript或Harmony解释器,如果可以使用解构赋值:)(以及其他类似Python的功能)——这可能会让OP感到困惑。您忽略了数据可能包含逗号的事实。结果似乎与我的拆分相同:如果存在更多逗号,消息部分也会被拆分。这是因为String.split()在javascript中有点不一致(或者至少它的行为与我使用过的所有其他语言不同)请注意,
与\n
不匹配。使用m
标志匹配换行符整个消息。匹配(/([^,]*),(.*)/m)如果你想要换行符,请使用/([^,]*),([\s\s]*)/m
@digitalbath:/。
将永远不会匹配JS中的换行符/m
不会改变
的工作方式,只有/s
会。JavaScript对此没有修改器。您必须使用类似于[\s\s]
的内容。例如:/^([^,]*),([\s\s]*)/
修改JavaScript内置的原型对象可能会产生意外的副作用。我会远离这种模式。我不会为了这样一个小的、单一用途的东西而修改全局字符串原型。也许,如果这是您将非常频繁地使用的东西,并且在一个您不需要担心名称空间冲突的环境中……我并不是真的想引起这样的抗议,这可能是一个具有两个参数的基本函数。我之所以使用这个原型,是因为它是在我的大脑中从以前的一个项目。
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;
};
var a = whole_message.split(",");
var topic = a.splice (0,1);