用正则表达式拆分javascript中的字符串?

用正则表达式拆分javascript中的字符串?,javascript,regex,split,Javascript,Regex,Split,我在javascript中有以下字符串 Id:121,RefId:123,Date:Sep 22, 2012 12:00:00 AM 当我试图把它分成3个键、值对时,使用逗号作为分隔符,它给了我错误的输出,因为在日期中还有另一个逗号。 所以我想我必须使用正则表达式。 我想显示如下 Id:121 RefId:123 Date:Sep 22, 2012 12:00:00 AM 有人能建议如何使用正则表达式克服日期中多余的逗号吗? 提前感谢…您的意思是在上拆分,后面跟着的不是空

我在javascript中有以下字符串

Id:121,RefId:123,Date:Sep 22, 2012 12:00:00 AM  
当我试图把它分成3个键、值对时,使用逗号作为分隔符,它给了我错误的输出,因为在日期中还有另一个逗号。 所以我想我必须使用正则表达式。 我想显示如下

Id:121   
RefId:123   
Date:Sep 22, 2012 12:00:00 AM  
有人能建议如何使用正则表达式克服日期中多余的逗号吗? 提前感谢…

您的意思是在上拆分,后面跟着的不是空格

'Id:121,RefId:123,Date:Sep 22, 2012 12:00:00 AM  '.split(/,(?=\S)/);
// will give you ["Id:121", "RefId:123", "Date:Sep 22, 2012 12:00:00 AM  "]
你的意思是在右边分开,后面跟着的不是空格

'Id:121,RefId:123,Date:Sep 22, 2012 12:00:00 AM  '.split(/,(?=\S)/);
// will give you ["Id:121", "RefId:123", "Date:Sep 22, 2012 12:00:00 AM  "]

如果确实需要正则表达式而不是有限拆分,可以执行以下操作:

var text = "Id:121,RefId:123,Date:Sep 22, 2012 12:00:00 AM";
text.match(/^(.+?),(.+?),(.+)$/);

如果确实需要正则表达式而不是有限拆分,可以执行以下操作:

var text = "Id:121,RefId:123,Date:Sep 22, 2012 12:00:00 AM";
text.match(/^(.+?),(.+?),(.+)$/);

如果要使用正则表达式,可以尝试以下操作:

re = /^Id:(\d+),RefId:(\d+),Date:(.+)/
matches = re.exec("Id:121,RefId:123,Date:Sep 22, 2012 12:00:00 AM")
matches[1] // "121"
matches[2] // "123"
matches[3] // "Sep 22, 2012 12:00:00 AM"

如果要使用正则表达式,可以尝试以下操作:

re = /^Id:(\d+),RefId:(\d+),Date:(.+)/
matches = re.exec("Id:121,RefId:123,Date:Sep 22, 2012 12:00:00 AM")
matches[1] // "121"
matches[2] // "123"
matches[3] // "Sep 22, 2012 12:00:00 AM"

“有些人在遇到问题时会认为‘我知道;我使用正则表达式’。现在他们有两个问题。”你是如何得到这样一个字符串的?其模棱两可的格式不容易处理。你为什么不使用JSON、CSV或诸如此类的格式?@Joey:由于我们在不使用正则表达式的情况下都失败了,有时不使用正则表达式会导致更多的问题:Tim:的确如此。尽管如此,在大多数情况下,这一点仍然成立:-“有些人在遇到问题时会认为‘我知道;我使用正则表达式’。现在他们有两个问题。”你是如何得到这样一个字符串的?其模棱两可的格式不容易处理。你为什么不使用JSON、CSV或诸如此类的格式?@Joey:由于我们在不使用正则表达式的情况下都失败了,有时不使用正则表达式会导致更多的问题:Tim:的确如此。不过,这一点在大多数情况下仍然适用:-您可以使用[^,]*而不是.+?,这样会更有效率。[^,]或.+?在汇编中不会有任何差别,但你可以选择你想要的。@Jan StefanJanetzky我认为Tim的意思是性能的差别。只有在[^]中有多个字符时才会有性能的差别。不,这是不正确的。应用于测试字符串的正则表达式将执行正则表达式引擎49个步骤,直到实现匹配,而不是我的正则表达式将执行的10个步骤。通过使+量词变懒,可以强制正则表达式引擎在每个字符后回溯。如果无法匹配输入字符串,则情况更糟。如果我从字符串中去掉第二个和第三个逗号,您的正则表达式需要248个步骤来找出不匹配项,而我的需要8个。您可以使用[^,]*而不是.+?,这样会更有效率。[^,]或.+?在汇编中不会有任何差别,但你可以选择你想要的。@Jan StefanJanetzky我认为Tim的意思是性能的差别。只有在[^]中有多个字符时才会有性能的差别。不,这是不正确的。应用于测试字符串的正则表达式将执行正则表达式引擎49个步骤,直到实现匹配,而不是我的正则表达式将执行的10个步骤。通过使+量词变懒,可以强制正则表达式引擎在每个字符后回溯。如果无法匹配输入字符串,则情况更糟。如果我从字符串中去掉第二个和第三个逗号,您的正则表达式需要248个步骤来找出不匹配项,而我的需要8个。