Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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 Regex在“:”之前获取字符串,直到多个空格_Javascript_Node.js_Regex - Fatal编程技术网

Javascript Regex在“:”之前获取字符串,直到多个空格

Javascript Regex在“:”之前获取字符串,直到多个空格,javascript,node.js,regex,Javascript,Node.js,Regex,我们正试图从一个没有遵循任何正确模式的字符串中生成一个对象 HP:(000)123-4567年龄:53岁S:F^0001 S.波托马克出生日期:1900年4月11日地点:科罗拉多州奥罗拉市E.ER^ PHYS:ISADE-jhghj,Devon Chase^电话:000-000-0000考试日期:2017年12月24日状态:注册人^传真:000-000-0000 A#:Eu67765765hh U#:E498576684957 ^第1页 为了获取属性,我尝试从冒号向后提取到多个空格 这就是我想

我们正试图从一个没有遵循任何正确模式的字符串中生成一个对象

HP:(000)123-4567年龄:53岁S:F^0001 S.波托马克出生日期:1900年4月11日地点:科罗拉多州奥罗拉市E.ER^ PHYS:ISADE-jhghj,Devon Chase^电话:000-000-0000考试日期:2017年12月24日状态:注册人^传真:000-000-0000 A#:Eu67765765hh U#:E498576684957 ^第1页

为了获取属性,我尝试从冒号向后提取到多个空格

这就是我想到的


^(.*)(此正则表达式似乎适用于给定的示例():


它使用惰性量词和前瞻表达式的组合来分离属性及其值。

这对您有用吗

[a-zA-Z]*:([^:]*)\s?
试试这个正则表达式:

((?:[A-Z]+\s*)*#?):\s*([\s\S]*?(?=$|\s+(?:[A-Z]+\s*)*#?:))

说明:

  • ((?:[A-Z]+\s*)*#?)
    -第1组包含0+次出现的(1+次出现的大写字母后跟0+空格),然后是可选的

  • :\s*
    -匹配一个
    ,后跟0+个空格

  • ([\s\s]*?(?=$|\s+(?:[A-Z]+\s*)*#?:)
    -第2组,包含字符串末尾或下一个属性名称后面的字符序列(
    \s+(?:[A-Z]+\s*)*#?:


值本身是否也可以包含空格和冒号?属性名称是否始终使用大写字母?是的,所有属性名称都将使用大写字母。而且它们可能是一个点或多个点。为什么您说需要收集
E.ER^Aurora,CO 80088
,但在您自己的代码中已经显示了这一点
S
值应该只是
F
,而不是
F^0001 S。Potomac
?是
FAX:
一个名为
FAX
的属性,或者是密钥的散列部分?@raina77ow是的,我的错,S的值应该是
F^0001 S。Potomac
它不起作用。因为我们需要忽略
^
。至于LOC的值应该是
E.ER^Aurora,CO 80088
更新了我的答案,现在它使用
(?:[A-Z#]+?)+:
lookahead as pattern(作为给定属性的模式)。因此,您可能会错过可以同时作为两个属性处理的值。它将下一个属性名称作为最后一个属性的值捕获。我将使用@raina77ow的答案
[a-zA-Z]*:([^:]*)\s?
((?:[A-Z]+\s*)*#?):\s*([\s\S]*?(?=$|\s+(?:[A-Z]+\s*)*#?:))