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*)*#?:))