多行随机顺序的正则表达式

Regex on multiple lines of random order

我正在使用 BIRT 设计一个基于数据库的报表,其中一个表单字段包含多行,就像这样:

Site: Place ThePlace

Room: D2 RMD3

InstanceId: OI-RandomChars

事实上,它们并不总是按此顺序排列,因为它是用户输入的(以其他形式,而不是 BIRT 提示)。 请注意,这些字段包含大写字母。

所以我想做的是在三个单独的列中提取,因此在 JavaScript 中使用三个正则表达式站点、房间和 InstanceId。 我已经尝试了很多事情,比如捕捉每一行直到行尾或者在各种条件下播放子字符串......到目前为止我认为最好的办法是使用字符串函数替换来删除与我想要的不同的东西抓住。 Room 行的一个例子是:

row["Log"].replace(/?![Room:\s\S*\s]/, "")

我遇到了一个错误,但你可以看到我尝试做什么。

感谢您对我的问题的所有考虑。

对于这种工作,单个正则表达式可能会变得过于复杂,难以阅读和维护。

我可能会考虑像您的第一直觉那样以编程方式进行。

首先我会考虑将字符串拆分成行

var lines = string.split("\n\n");

这会将你所有的双线拆分成一个数组

["Site: Place ThePlace", "Room: D2 RMD3", "InstanceId: OI-RandomChars"]

然后循环遍历所有行,然后进行检查。 如果你愿意,你现在的检查实际上可以是正则表达式,或者使用子字符串。

这是一个例子:

var site, room, InstanceId;
var siteCheckRegex = new Regex("^Site:");

for(var i=0; i<lines.length; i++){

      if(siteCheckRegex.test(lines[i])){
        site = lines[i].replace("Site:","");
      }

      [...]
}

这实际上取决于您真正想从中得到什么,以及您可以在用户输入数据中找到的问题和差异。