正则表达式 - 重复数据

时间:2013-12-06 18:22:49

标签: javascript regex

我有一个数据:

#object
id=91
name=precka
material=18ST2
#topology
2, 1, 5, 4, 9, 8, -1
#points
566.068643742472, 135, 9

#object
id=92
name=precka2
material=18ST2
#topology
6, 1, 6, 4, 9, 8, -1  
5, 1, 6, 4, 9, 8, -1
#points
216.068643742472, 235, 19 
216.068643742472, 235, 19

现在我需要从id,name,material,#topology到#points获取所有内容。目前我设法编写了一个如下所示的正则表达式:

/#topology+([\s\S]*)#points([\s\S]+)/m

我想将其更改为从#object循环到#object并获取每个#object数据(id,name,topoloy ..)。这很难吗?

2 个答案:

答案 0 :(得分:5)

String.split #object上的文字,并将正则表达式应用于函数返回的数组中的每个元素。

答案 1 :(得分:2)

如果您只需要这三组的内容。但是,如果还有其他组,正则表达式需要一些调整。

 # /^\#object(.*\n(?:^(?!\#object|\#topology|\#points)[^\n]*\n)*)^\#topology(.*\n(?:^(?!\#object|\#topology|\#points)[^\n]*\n)*)^\#points(.*\n(?:^(?!\#object|\#topology|\#points)[^\n]*\n)*)/m

 ^ \#object
 (                                  # (1 start), Object
      .* \n 
      (?:
           ^ 
           (?! \#object | \#topology | \#points )
           [^\n]* \n 
      )*
 )                                  # (1 end)
 ^ \#topology 
 (                                  # (2 start), Topology
      .* \n 
      (?:
           ^ 
           (?! \#object | \#topology | \#points )
           [^\n]* \n 
      )*
 )                                  # (2 end)
 ^ \#points
 (                                  # (3 start), Points
      .* \n 
      (?:
           ^ 
           (?! \#object | \#topology | \#points )
           [^\n]* \n 
      )*
 )                                  # (3 end)