在消息简单表单履行加速器与正则表达式

时间:2017-07-14 02:48:26

标签: javascript regex

我正在尝试使用regexcapturing groups通过普通聊天消息创建一些简单的数据输入。我们的想法是让用户write a lot of things然后使用scape #然后name: anything; description: anything 2; complement : anything 3...

这个难题的一些要求和特征:

  1. 我知道字段的名称
  2. 字段按任意顺序
  3. 字段补充是可选的
  4. 我们无法在同一条消息中重复这些字段(过于复杂,我认为这样很好,我可以在服务器中处理它)
  5. 我需要能够捕获每个字段的字段和值
  6. 必须在客户端上执行正则表达式sintaxe,因为我需要在用户输入时突出显示
  7. 添加#提交
  8. 不是必须的

    对于第一个(用户写下他/她需要什么,直到scape #)我写了

    第一部分,自由文本(FT):([,\w\s():\.\$]*)

    对于第二部分,我认为我应该有以下内容:((#(obligatory pair)+);?)*)是最后一个*,以确保整个#序列不是强制性的,但一旦他/她添加#,必须遵循模式。

    所以我最终得到了以下(here in regex101)

    ([,\w\s():\.\$]*)(?:(?:#(?:(?:\s*(name|description|complement)):([,\w\s():\.\$]+))+;?)*)
    

    并在以下文字中使用(在上面的链接中)

    This is is the free text that the user is writing. Now with the scape # name: free text to write; description: another free text and then ; complement : yet another one
    

    现在当然这不会起作用,但不仅仅是因为我知道我会遇到的问题,如果"name"被使用或不被使用,我无法控制。 问题在于-g只捕获了第一个字段name,而+g descriptioncomplement显然不属于匹配项模式,因为我可以创建另一个名为completelyWrong的字段,它将出现在我的捕获中。

    我很确定,因为我是正则表达式世界的新手,所以这是一个不稳定的解决方案。任何帮助都非常欢迎。

1 个答案:

答案 0 :(得分:1)

试试这个:

(?:^[^#]*|([a-z]+)\s*:\s*([^;]*))

它将用户文本与第一个匹配项匹配,并将所有字段与组1中的名称和组2中的内容进行匹配。

Regex101