有什么比在循环中拆分字符串更好的方法呢?

时间:2016-10-01 13:50:26

标签: javascript regex algorithm object split

我有一个字符串:

FeatureName:Height-FeatureValue:1-vmin:1-max:20000-pricing-row-,
FeatureName:Width-FeatureValue:1-vmin:1-max:20000-pricing-row-,
FeatureName:ChannelCount-FeatureValue:23-vmin:234-max:0-pricing-row-,
FeatureName:Height-FeatureValue:1980-vmin:17-max:20000-pricing-row-,
FeatureName:Width-FeatureValue:230-vmin:234-max:987-pricing-row-
FeatureName:ChannelCount-FeatureValue:98-vmin:2834-max:0-pricing-row-

将此字符串转换为具有3个键的对象的最佳方法是什么:HeightWidthChannelCount并且对应于每个键,有相应的值,例如as:

   Width => [
              {'FeatureValue' : 1 , 'vmin' : 1 , ...} , 
              {'FeatureValue' : 230 , 'vmin' : 234 , ...}
             ]

HeightChannelCount

我试图拆分字符串,然后运行多个循环并在循环内再次拆分字符串。有什么比这更好的方法?如果可以遵循正则表达式的方法,那将是最好的。

1 个答案:

答案 0 :(得分:0)

通过多次拆分来拆分(即解析)此字符串并不是一个糟糕的解决方案。

但是,如果要使用正则表达式,请首先将输入拆分为“,”,然后将输入拆分为单独的行。 然后,对于输入的每一行,使用此正则表达式将行解析为其组件:

var s = 'FeatureName:Height-FeatureValue:1-vmin:1-max:20000-pricing-row-';
var ar = /([^-]+)-([^-]+)-([^-]+)-([^-]+)-(.+)/.exec(s);

ar [1]到ar [5]包含组件,例如:

  'FeatureName:Height',
  'FeatureValue:1',
  'vmin:1',
  'max:20000',
  'pricing-row-'

可选地,此正则表达式将进一步将每一行分成每个组成部分:

var ar = /([^:]+):([^-]+)-([^:]+):([^-]+)-([^:]+):([^-]+)-([^:]+):([^-]+)-(.*)/.exec(s)

例如:

'FeatureName',
  'Height',
  'FeatureValue',
  '1',
  'vmin',
  '1',
  'max',
  '20000',
  'pricing-row-',

希望您可以使用这些正则表达式来优化您的解决方案。