Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式从Javascript中的字符串中拆分键值对(key:value-key:“va-lue”)_Javascript_Regex_Regex Group - Fatal编程技术网

正则表达式从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+:|$)

说明:

  • \w+
    -匹配1+个单词字符的出现次数,即
    a-z
    a-z
    0-9
  • -匹配
  • *?
    -匹配除换行符以外的任何字符的0+次出现次数,尽可能少
  • (?=\s+\w+:|$)
    -正向前瞻,以确保当前位置后跟行尾或1+空格后跟1+单词字符,后跟一个
代码:

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+:|"?$)