正则表达式从Javascript中的字符串中拆分键值对(key:value-key:“va-lue”)
我正在寻找一个正则表达式,它将以下格式的字符串拆分为一个键值对数组正则表达式从Javascript中的字符串中拆分键值对(key:value-key:“va-lue”),javascript,regex,regex-group,Javascript,Regex,Regex Group,我正在寻找一个正则表达式,它将以下格式的字符串拆分为一个键值对数组 "category: Music artist: \"Chris Martin\" album: \"A head full of dreams\" genre: dance" 进入 另外,我如何验证字符串的格式是否正确,比如每个键都有一个值,如果键或值中有空格,则必须用双引号括起来 我提出了这个方法来分割键值对,但它只能在键值用引号括起来并用逗号分隔时分开 /(^[^\s:"]+: *"[^"]+"$)|([^"]+: *[
"category: Music artist: \"Chris Martin\" album: \"A head full of dreams\" genre: dance"
进入
另外,我如何验证字符串的格式是否正确,比如每个键都有一个值,如果键或值中有空格,则必须用双引号括起来
我提出了这个方法来分割键值对,但它只能在键值用引号括起来并用逗号分隔时分开
/(^[^\s:"]+: *"[^"]+"$)|([^"]+: *[^"]+$)/
您可以获取匹配项,而不是通过以下正则表达式拆分字符串:
\w+:.*?(?=\s+\w+:|$)
说明:
-匹配1+个单词字符的出现次数,即\w+
,a-z
,a-z
,0-9
-匹配:
:
-匹配除换行符以外的任何字符的0+次出现次数,尽可能少*?
-正向前瞻,以确保当前位置后跟行尾或1+空格后跟1+单词字符,后跟一个(?=\s+\w+:|$)
:
var regex=/\w+:.*(?=\s+\w+:|$)/gm;
var str=“类别:音乐艺术家:\“克里斯·马丁\”专辑:\“充满梦想的脑袋\”流派:舞蹈;
var objMatch=regex.exec(str);
var arr=新数组();
while(objMatch!=null)
{
arr[arr.length]=对象匹配[0];
objMatch=regex.exec(str);
}
对于(var i=0;i,您可以使用以下方法获得所需的匹配:
(\w+):\s?(.+?)(?=\s+\w+:|"?$)
或者在没有捕获组的情况下:
\w+:\s?.+?(?=\s+\w+:|"?$)
查看演示
解释
(\w+):
将匹配以冒号结尾的任何单词,并捕获单词部分
+?
将延迟匹配任何字符,即在满足下一个条件时停止匹配
(?=\s\w+:)
是一种环顾匹配,在匹配\s\w+:
时停止匹配。它对应于一个空格,后跟一个以冒号结尾的单词。您忘记了两件事。一件是验证没有值的键,另一件是将键或包含空格的值括在双引号内。@revo如果键没有值,那么我的在这种情况下也可以。但你仍然是正确的。在回答这个问题时,我只是保留了OP提供的示例字符串作为参考。不,如果输入字符串末尾出现一个没有值的键,则不会发生这种情况。@Gurman我如何验证给定的字符串是否符合我指定的格式?它应该是键值对并包含在内如果键/值有空格,则在引号内。当我使用错误格式的字符串执行测试时,两个正则表达式都返回true。regex.test(strInWrongFormat)
\w+:\s?.+?(?=\s+\w+:|"?$)