正则表达式在`:`之前获取字符串直到多个空格

时间:2017-12-29 12:24:52

标签: javascript node.js regex

我们正在尝试从一个字符串中创建一个对象,它没有遵循任何正确的模式。

HP: (000)123-4567 AGE: 53 S:F^ 0001 S. Potomac DOB: 11/04/1900 LOC: E.ER ^ Aurora,CO 80088 PHYS: ISADE - jhghj,Devon Chase ^ PHONE #: 000-000-0000 EXAM DATE: 12/24/2017 STATUS: REG ER^ FAX #: 000-000-0000 A#: Eu67765765hh U#: E49857684957^ ^ PAGE 1

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

这就是我想出来的。

^(.*?)(?<=\:).*?(?=\:)

这从:读取到:,即HP: (000)123-4567 AGE作为输出

但我需要将所有标题与他们的数据分开。

HP: (000)123-4567
AGE: 53
S: F^ 0001 S. Potomac 

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:2)

这个正则表达式似乎适用于给定的样本(demo):

([^:]+):(.+?)(?=(?:[A-Z#]+ ?)+:|$)

它使用惰性量词和先行表达式的组合来分隔属性及其值。

答案 1 :(得分:1)

试试这个正则表达式:

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

Click for Demo

<强>解释

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

  • :\s* - 匹配:后跟0次出现的空格

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

答案 2 :(得分:0)

这对你有用吗?

[a-zA-Z]*:([^:]*)\s?

demo