【问题标题】:Parsing to an array based on multiple delimiters基于多个分隔符解析为数组
【发布时间】:2016-11-25 08:04:46
【问题描述】:

我需要解析以下字符串(解析PDF,想避开第三方包)。

/Type /Pages /MediaBox [0 0 612 792] /Count 9 /Kids [5 0 R 355 0 R]

我正在使用 Javascript:

String.split(' ');

我想得到的输出是 [ '/类型', '/页', '/媒体框', '[0 0 612 792]', '/数数', '9', '/孩子们','[5 0 R 355 0 R]' ]

这将导致:以下输出:['

具体来说,我想分隔“[”和“]”。这样字符串将显示为 '[ 5, 0, R, 355, 0, R]'

预期的最终结果是这样的:

我正在尝试查看是否可以使用正则表达式解决此问题,但目前我被卡住了。

【问题讨论】:

  • 您知道示例中的大部分空格都是可选的吗?这些键值对也可以写成/Type/Pages/MediaBox[0 0 612 792]/Count 9/Kids[5 0 R 355 0 R]。您的解析想法太简单了...此外,中间还可以有注释行...

标签: javascript parsing pdf


【解决方案1】:

这个正则表达式应该处理它

var input = "/Type /Pages /MediaBox [0 0 612 792] /Count 9 /Kids [ 5 0 R 355 0 R ]"
var result = input.match(/(\[[^\]]+\]|\S+)/g)
console.log(result)

作为解释,它将每个不是 ] 的字符分组在字符 [ 和 ] 之间([[^]]+])或不是空格的字符序列 (\S+)

【讨论】:

  • 只是一个指针,OP需要用逗号替换[..]中的空格
  • 选择了这个答案,因为它简洁明了。
【解决方案2】:

您可以使用将返回[...] 组的正则表达式,然后您可以将spaces 替换为comma。然后,您只需将其拆分为spaces

var s = "/Type /Pages /MediaBox [0 0 612 792] /Count 9 /Kids [ 5 0 R 355 0 R ]";

var arr_reg = /\[(.*?)(?:\]|$)/g;
s = s.replace(arr_reg, function(str){
  str = str.substring(1,str.length-1);
  return "[" + str.trim().replace(/ /g, ',') + "]"
});
console.log(s.split(' '))

【讨论】:

  • 谢谢,请看我编辑的问题:你能解释一下正则表达式末尾的“|$”是做什么用的吗?
  • @Vinod 匹配以]结尾的组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多